440 karma · joined May 26, 2010
http://twitter.com/ashearer
http://ashearer.com/
Existing electronic medical records systems are at their best for long-term documentation, and fall short on keeping care providers abreast of ever-changing plans across shift transitions. Pagers and phones, which doctors and nurses use instead for real-time communication, fare even worse. The information is simply invisible to the next person who takes over.
We've had terrific, sustained adoption where Care Thread's system is deployed, and are working to measure the effect on patient outcomes. Some study results are pending (from Partners / Brigham & Women's Hospital in Boston, where researchers put iPads in the hands of patients and used our mobile messaging system to help keep care providers aligned with each other and with patients).
I co-founded Care Thread [2] to help address the communication problems I saw working in hospitals. Electronic medical records systems weren't designed around real-time communication, and mobile secure messaging systems tend to replicate the original alpha pager workflow, without directing the improved technology at improving collaboration.
The project involves removing points of communication friction, keeping track of the patient's care team, injecting relevant EMR data into the communications stream and pushing it to the right care team members as soon as it's available, and keeping everything visible to the interested parties.
If you're interested in something like this, I'd love to talk. Please contact me through my profile or on our web site.
[1] http://www.jointcommission.org/assets/1/6/tst_hoc_persp_08_1... [2] http://www.carethread.com
It's not limited to Apple, but the pattern is the same: it goes immediately from conjecture to absolute certainty of malicious intent (but they didn't count on the speaker being clever enough to see through the scam). And if disproved, it's just the exception that proves the rule, which the speaker then has to loudly reassert.
We need a new rule: Never ascribe to malice what's adequately explained by others having different priorities than you.
function isValidFoo(val) {
...return boolean
}
This function is synchronous now, but its contract needs to change if it internally calls something async (say, it's updated to check a value from a cache, which may trigger a DB lookup). The new signature has to add a callback parameter and drop the return value, or return a promise. Then its callers have to change how they invoke the function, and if they were previously synchronous their signatures have to change as well. Every synchronous function up the call stack needs to care about this internal change.To avoid a ripple effect, all functions have to be designed to be asynchronous from the beginning, but this increases program complexity significantly. It means avoiding built-in language features such as direct return values, and often means substituting async library functions for built-in looping constructs.
Other languages including Go aren't like that. You don't need to wrap a simple return value in a promise or callback just because retrieving it might someday involve I/O. Execution of the thread/goroutine simply resumes whenever the value is ready, and the function returns normally. In those languages, Node's distinction between sync and async is artificial and unnecessary.
The fact that the FBI requires Apple to vouch for it as an iOS product makes the "not-a-product" argument harder to maintain. (Also weakening the argument: the applicability of nearly the same software to replace the OS on an unlimited number of iPhones that the FBI may introduce later, or if leaked, a large number of iPhones in the wild.)
By the time Django finally broke through, PHP (with a good-enough mini-framework baked in) already dominated Python for web development, and the fragmentation of the Python world was arguably a contributing factor. Others adopted a third language because of a single mindshare-heavy framework, Rails.
Takedown articles tend to share similar characteristics. Many are on a mission that emphasizes the negatives of their subject, even minor ones, while overlooking the positives and handwaving away problems with the alternatives. They set the bar higher for the subject by finding issues that it shares equally with its alternatives, and presenting them as damning evidence against it (since users may expect it to be better and be disappointed). The specific alternative that's held up as superior to the subject varies from point to point--no one alternative is actually superior in all points. They may even acknowledge that many of their arguments are weak, but make up for it in volume.
In its favor compared to such articles, this one does make some attempts to be evenhanded, but they're overpowered by the dramatic language used to make the opposing points. (For example, the brief acknowledgement that point 1 is the "weakest argument against WebSockets" is surrounded by phrases like "wreak havoc", "weird stuff will definitely happen", "rogue proxies will break you").
This article puts itself squarely in the category of "the case against".
A more balanced article might discuss:
1. The situations where you might want to avoid WebSockets (no HTTPS, IE 8 & 9 compatibility, a server platform without good support, or where they don't provide actual usability benefits).
2. Pitfalls that both long-polling and WebSockets share (you have to handle reconnections and synchronize state, be mindful of the open connections when reconfiguring a load balancer, account for server load, and use a server platform with good support for long connections).
3. Differences that can be viewed just as reasonably in WebSockets' favor, which the article counts as negatives. Example 1: Resynchronizing state after a network interruption is necessary with both long-polling and WebSockets, though the article notes it as a WebSockets disadvantage. The reconnection process is explicit with WebSockets, but some long-polling libraries make it very easy to ignore these events, leaving the client out of sync. Example 2: WebSockets aren't limited to 6 connections, unlike long-polling, so you won't get a silent connectivity roadblock on some tabs when the user has several of them open.
4. Advantages unique to WebSockets: responsiveness is improved due to not needing to send HTTP headers with every request and response, and the underlying TCP connection is already warmed up; load balancing and redundancy may be simplified by no longer requiring a session affinity mechanism (because the connection itself preserves short-term state, which can be re-established by the client transparently to the user in the rarer event of reconnection); less overhead than long-polling; a whole class of problems resulting from cookies as the sole mechanism of state transfer is avoided; the same protocol can be implemented simply and efficiently by native mobile apps.
I expect it to be much easier to come up with a statistical prediction for the get-better-anyway effect (regression to the mean), with more specificity than x>0. It would be needed regardless, in order to exclude the null hypothesis.
I don't understand how more studies testing theory A and getting 25%, while excluding theory B from testing, can show that A should be preferred over B. The rationale that A has been tested more thoroughly and therefore has a smaller confidence interval sounds circular.
That article's more recent (2010) link supports its conclusion, which wouldn't need to be stated unless it contrasted with what it calls “pharmacological folklore” from the original publication, which the author says he “took literally” for many decades after.
The point being that the 1955 version of the idea is currently much more widely known than modern no-treatment comparisons, and most people don't realize that its research basis is so flimsy.
[1] https://books.google.com/ngrams/graph?content=placebo+effect...
As for health records, perhaps the expectation of a neat database decomposition—data perfectionism—is itself the enemy. For just about any given application, such complete information isn't necessary to improve on the status quo.
From my perspective, too much effort is spent creating One More Standard to unlock data nirvana, and not enough on breaking down the organizational walls and misaligned incentives that brought us to this point.
The post author alluded to this, in mentioning the EHR cash incentives that tragically lacked viable interoperability requirements, and so just served to lock in the major vendors' existing systems.
It's a decent heads up about these features, but there are some editing errors and an odd emphasis on multiple CPUs, while DB row locks are the limiting factor in the examples. I'm having trouble interpreting the final paragraph. ("Keep in mind: If you only got a single CPU, concurrency will be a problem. Therefore is essential to do things in a way that many CPUs can do their share of work at the very same time.")