Yeah, if you can get away with that model things are simpler. The best first step into SOA to take is offloading work that doesn't need a user response to a pool of workers (often by publishing to a message bus, as mentioned elsewhere in the thread). I've implemented systems like that using Rabbit and Redis and it worked fairly well.
However, some kinds of requests are fundamentally about integrating the results of a bunch of different services into a response to send to the user. In that case you somehow need to gather the results of your rpcs/events in one place to integrate them. An example is Google search where the normal results, ads, and various specialized results/knowledge graph data need to be integrated to present to the user.
Another consideration is how much you want to be able to isolate services. If you have a user/auth service as in the article which completely encapsulates the database and other resources needed for data about users then you'll end up with a lot of calls into that service. It's a disadvantage because of all the reasons in my original comment, but it's great from the perspective of being able to isolate failures and build resilient systems
If you're considering switching your monolithic application into a SOA you should consider the testing and debugging implications seriously.
If your call graph goes more than one level deep then doing integration/functional testing becomes much more complicated. You have to bring up all of the services downstream in order to test functionality which crosses that boundary. You also have to worry a lot more about different versions of services talking to each other and how to test/manage that. The flip side is that the services will be much smaller, so leaf nodes in the call graph can reach a level of test coverage higher than a monolithic service.
Debugging and performance testing becomes more complicated because when something is wrong you now have to look at multiple services (upstream and downstream) in order to figure out where the cause of some bug or performance issue is. You also run into the versioning issue from above where you have a new class of bug caused by mismatched versions which either have tweaked interfaces or underlying assumptions that have changed in one but not the other (because the other hasn't been deployed and those assumptions are in shared code). The bright side for debugging and performance is that once you know which service is causing the issue it's way easier to find what inside the service is causing the issue. There's a lot less going on, so it's easier to reason about the state of servers.
I'm using MailTab Pro, which does notifications as well as presenting a mobile web view of the gmail website. I actually end up doing a lot of my email writing and processing directly from the web view because it's so much faster than the full Gmail site.
You're better off going to a hotel in terms of cleanliness, and they are located all over midtown. I've never been refused from a hotel when I searched for or asked where the restroom was
Generally multiple currencies aren't accepted and the volatility is much lower. You probably couldn't make a profit on normal consumer goods that have a return policy. For this to work you'd need potentially extreme currency changes over the course of a few weeks.
If merchants were doing sales and returns using Bitcoin it seems like you could make money on the volatility by returning items when the value of Bitcoins went up within the return window. You'd have to be willing to keep items you bought if the value of Bitcoin went down, but if you systematically made all your regular purchases that way you ought to come out ahead. Is this a real risk for merchants, or am I missing something?
Neat. An Objective C bridge to access OS X's frameworks was specifically what I was thinking of, and it looks like there is one: https://github.com/TooTallNate/NodObjC
Fun fact: If you're taking one vowel and five consonants the Wheel of Fortune letters RSTLNE—not in that order—are the letters that are most likely to occur
Impressive. I think these sorts of articles are hard to come by because many (if not most) super productive programmers are doing their work for a company where the outside world won't find out about what they have done. Fabrice is notable because he's got a lot of high profile work.
Yes. Audio Edition is a word-for-word reading of the print edition. Economist Radio looks like it has the random other audio things they do (there's also a podcast on iTunes with those sorts of things)
For anyone who isn't ready to completely turn off the news spigot, consider switching to a weekly (or monthly) source of news.
I get all of my (non-HN) news from The Economist's audio edition. It's released weekly and they have a section right at the start about big things happening in business/politics around the world in the last week. It's no more than a couple minutes to scan, and 10-20 in normal speed audio.
The rest of the articles are at least one step back (since they summarize a week of what's happened). Many others are looking at some larger event or trend, sometimes with a recent event/anecdote as a lead in.
I like the audio edition in particular since I can put it on while I'm doing chores or commuting and I'll pick up bits and pieces even if I'm not fully paying attention. I can also have only the sections I care about included, which lets me skip the ones I really don't care about.
Is there a list of languages which use separate heaps for each thread? I'm really interested in learning more about that concurrency model, but haven't had much luck compiling a comprehensive list of which languages actually use it
This is cool. I implemented an extremely similar system for my last job. The data was dumped into mongo and then we visualized it with stacked bar graphs.
One thing to consider since you're using a count+total model is that the most interesting timings will often be the 90th or 99th percentile, so by calculating averages you might be missing useful information.
I ran into some issues with the implementation after switching to using an async framework since the code was no longer a series of nested function calls. Since the current best practice is coroutines where this will still work I think it's okay, but you should consider how someone using callbacks might time their code. In my case I was in a hurry so I manually called the equivalent of your __enter__ and __exit__, but it was pretty ugly and left a lot of room for bugs.
Introversion and extroversion are obviously a spectrum. The reason that having that as an axis when discussing personalities rather than two different axes because people do tend to fall somewhere on the spectrum and many of the traits are opposites. Knowing that someone is, say, "a little introverted" is a decent heuristic to use when describing someone's personality.
I wonder of the author has been Myers Briggs stuff where people are often slotted as one or the other (although a good assessment will still show where on each axis someone is)
The really short version is that the company sells (probably newly created) shared in exchange for money. The owners of the company are generally not selling their own shares. That would lead to serious complexity.
If you want to know more, read Venture Deals[1]. It's very thorough and well written.
However, some kinds of requests are fundamentally about integrating the results of a bunch of different services into a response to send to the user. In that case you somehow need to gather the results of your rpcs/events in one place to integrate them. An example is Google search where the normal results, ads, and various specialized results/knowledge graph data need to be integrated to present to the user.
Another consideration is how much you want to be able to isolate services. If you have a user/auth service as in the article which completely encapsulates the database and other resources needed for data about users then you'll end up with a lot of calls into that service. It's a disadvantage because of all the reasons in my original comment, but it's great from the perspective of being able to isolate failures and build resilient systems