Fluxx
"The cost increase was the result of detailed engineering studies conducted during the year or so after the initial estimate was released. Among other things, soil testing in the Bay had revealed that bridge pilings would need to be anchored “deeper into bedrock than expected,” she writes."
Now hindsight is 20/20 and I am not an engineer in this field, but it seems that if you're floating an estimate that isn't informed by the engineering studies necessary to give an accurate estimate then you probably shouldn't have given that initial estimate in the first place? Or at least should have given the initial estimate as a range and/or with a huge disclaimer that you might get into researching the bridge and the estimate could cost multiples more?
I commute by bike now, which is certainly the fastest way to get around the city - perhaps just not the safest or least-sweaty way.
Yet there is a whole 3/4 of the city that isn't encompassed by that part that is really, really awesome. It may not be "trendy" or anything, but they're full of great neighborhood places and "real" people. I think it's easy for everyone analyzing this situation to forget those places exist.
* maintains a semaphore of currently processing requests, and will immediately fail a request if the semaphore is full.
* tracks service latency and other statistics for you
* maintains a circuit breaker to immediately fail requests if the breaker is open (based on statistics)
* watches for health to be restored of the 3rd party service and allows requests to it again.
* built in request isolation via threadpools
* built in request collapsing and caching
Overall I like this cause it's a great demonstration of how to think about, and engineer for, failure in a distributed system.
This only works because the size of your n is small, possibly a few hundred, so it doesn't matter. When you start dealing with millions or billions of records this stuff matters. Quite a lot.
So really, it's not the language, it's the size of your data - or the size of n that matters.
http://www.amazon.com/Sleep-Innovations-12-inch-Memory-Mattr...
The damn thing was ~100lbs in a giant box, and I got it shipped to me free. It's super comfortable and well worth the money - remember you sleep for like 25% of your life.
Mattresses seem like less of a specialty-item than eye glasses, so I wonder if big online retailers like Amazon can just cut out the middle man and service 80-90% of customers?
Apple doesn't have "cheesy blah inside" stickers because that doesn't delight users and make the product better to use. They're stupid. Apple also doesn't chase fads because fads are just that, "a fad" and rarely do fads have long lasting staying power like a good product should.
I'm confused. Isn't Node's event-loop style programming ideal for long-lived requests? I.e. ones that, under a synchronous i/o, block other requests?
Twitter's scale is unlike nearly every single web app online, so I think the real story with Rails and Twitter isn't that "they had to move away from it for scalability reasons," but rather it's amazing that they were table to leverage Rails for as long as they did."
Also, Twitter is more dropping Ruby all together rather than just Rails specifically. Again, this isn't to say that Ruby isn't a great language that works for most people (it let Twitter grow quickly to where they are today), but at their scale with their demands it doesn't work well.
Say hello to Octicons
SEOmoz raises 18 million from Ignition and Foundry
http://devblog.seomoz.org/2011/10/using-riak-for-ranking-col...
Keep in mind we used Riak pre-1.0, so YMMV.
The short answer is that there is no difference. Just as you could mock out a call to S3API.get(object_id) and have it returns my_object, you could write a server that responds to the S3 API call for getting object_id.
The long answer is that using mocks is a lot quicker to develop, easier, more straight forward and has faster run time than maintaining a real runnable copy of S3 that behaves the exact same as the real S3. With the fake S3 you're still spending CPU cycles inside your S3 client while it talks HTTP with your fake S3, which slows unit tests down a lot. Plus fake S3 may have slightly different behavior when your S3API library interacts with it, which could lead to really hard to track down bugs later on. Trusting your APIs is what unit testing is all about.
There are a few better strategies I can see here:
1. For test, use something like VCR[1] to record real HTTP interactions with the real S3 API during first test runs, serialize them to disk, and then replay them later.
2. Go the more OO route and create an internal business object with a defined interface that handles persistance of your objects. You could have a S3Persister for production and staging, but then you can create a LocalDiskPersister or even MemoryPersister for tests. Hell, you can even keep your own S3 and create OurS3Persister as well. The main point here is that your application code is coded to one API/interface - the "persister" - and you can easily swap in different persisters for different reasons. All the individual persisters can then have their own tests that guarantee they adhere to to Persister interface and do their own individual things correctly.
3. Mock out the calls to your S3 library. It's the job of the library to provide an API interface for you as the application developer to S3, so you can mock out those API calls and trust the library works and is doing the right thing. Since you're mocking things out, you should still have integration tests with the real S3 to verify everything is working, but for quick unit tests mocking works great.
The blog post mentioned they had GB of data, so YMMV on these ideas, but these are strategies I and others have used in the past when dealing with APIs like S3 and they work great.
Even though this technique existed 30 years ago, doesn't mean that it's been recently "rediscovered" by the Ruby folks and excitedly implemented to the musings of, "how did we miss this technique?!?" There are likely lots of reasons why this wasn't used before. The abstract of their paper seems to shed some light on this:
[...]But Ruby interpreter runs on various platforms, and we do not have portable memory allocation API to obtain aligned memory region without wasting region. In this paper, we propose portable scheme to map from object pointers to corresponding bitmap table in constant time.[...]
I may be totally wrong, and the paper is entirely in Japanese, but I think there is more to it.
Orbital: A real-time map built on top of Websockets and ZeroMQ
If you're talking Python, Lettuce does this is Python, there also is Splinter. You can run selenium with a headless firefox quite easily with Xvfb.
If you're talking rails, Capybara has drivers for Webkit (QI), selenium and even PhantomJS. Their speed is variable, but it's not too bad.
On the "HTML changes break my tests," I'd argue that A) you should write your front end tests not tied to the HTML if at all possible. Refer to elements by semantic names, not XPath or CSS selectors. And be smart about your steps. Make your submit_form() method actually look for a submit button in more than one way. B) you shouldn't have more than a handful of full stack frond end tests. They're hard to write, slow, and don't give much help telling you WHAT went wrong. Most of the time the ROI is only there for verifying a few user paths, but not much more than that.
I'm not denying that by doing what he did it certainly got the word out and made everyone understand how serious of a problem this is. It was a very good point and I think the outcome is the right one. I'm just saying that Github's actions - to suspend the user who somehow got SSH rights to the rails org - is the right thing to do. They want to minimize his damage that he will do, and until they can do a full audit and understand how his commit got there, it's the right thing o do.
> Making a silly commit did not make anyone's data more or less vulnerable, so I don't believe that "taking this shit seriously" implies flipping out over it.
I fail to see how suspending a user is "flipping out" over it? I don't think you can color unauthorized commits to github repos with different levels of responses from Github. That's a dangerous line to walk IMO.
You can still do that, you can turn the asset pipeline off and just throw everything in /public like normal if you want.
Re: "through Ruby." If you meant that the body of the CSS file is generated for a request by running through the ruby interpreter, that's not true.
Bottom line is Rails is, and always has been, and opinionated framework, which you choose to buy in to. And even in recent years they've been better about letting you opt out of certain parts of it.