text:
Most of these essays are quite old, dating from around 2009. My views have remained largely the same, but today I'd give them a more polished and softer-spoken treatment.
On travel and relationships? (2017)
The movie We Don't Live Here Anymore poses an interesting question: do we love someone for who they are, or for what they do? In this essay, I explain why We are what we do?.
Posts tagged happiness
Understanding religion as a virus of the mind - conversation with author Darrel Ray, Ed. D., on his book The God Virus
How to debate religious believers (and have a chance to shake their beliefs)?
Scorsese's "The Last Temptation of Christ" - How Christianity was really started
On US election day (2008-Nov-04), I debated a coworker who was FOR California Proposition 8, (banning same-sex marriage). As I said in another essay, if these persons are forced to articulate their beliefs in a clear, logical manner, they will quickly reach a reasoning blank (or act like a broken record and repeat the same debunked argument over and over). Here is the debate with a 'YES on 8' person?.
Son, you've finished high school now and the rest of your life is in front of you. What you do next is your choice, and I have two offers for you. I can either give you $10,000 cash right now, or I can fund a year of travel. The catch is, you travel alone. Let me know.
The young man pondered the options and chose the year of travel. Later in life, he realized more and more how that year, and how traveling alone, had been a far bigger jumpstart to his life and career than $10,000. By traveling alone, he was forced to constantly get out of his comfort zone, be in new situations, and meet new people. Some of the connections he made along the way lead to important business endeavors later. Others became lifelong friends.
I think travel is one of the most effective catalysts for personal growth. In my own experience, leaving Romania for Belgium and Silicon Valley in my early 20's enabled me to reconsider some of my deepest beliefs, and be free of influences that prevented me from achieving my potential. I stopped being religious, I started dating with no intention of getting married (which my family wasn't really okay with), and I started a career in IT that ultimately led to a job at Yahoo! and then Google.
I mentioned dating because when you date someone long term, you can grow together or you can grow apart. If travel changes you and you don't do it before you settle down in a marriage, chances are that travel bug will catch up with you. More and more people travel alone (24% in 2015, up from 15% in 2013!), and around half of them seem to be married or in committed relationships, according to the Visa Global Travel Intentions Study. (Unfortunately, the study didn't follow up those attached travelers to see how many of them remained with their pre-travel partner a year later.)
So get that personality-altering long-term travel craving fulfilled, and crystallize yourself, so to speak, before embarking on a long-term relationship you'll want to keep. Of course, you can travel with your partner, but as we've seen in the beginning, the growth potential will be reduced. On the other hand, long-term travel with your partner will stress your relationship, which is a catalyst as well -- you'll grow together, or apart, faster.
]]>by Dan Dascalescu
I am a native Romanian speaker, and English is my second language. Since 2008, I have been advocating for a very simple cause. It has been helping us communicate better, work and play together better, and become a more united mankind:
The world would be a better place if everyone spoke a common language.
What should that language be? English? Chinese? Esperanto? Should people stop learning the language of their country?
Read on.
I've been studying the topic of a global language since 1998, when I started the complicated process of immigrating into the US. My background includes a professional translator accreditation, two translated books, and six years in the localization/globalization industry, of which four at Yahoo!.
Here are some major advantages of the world using a global language for communication that goes beyond one's immediate surroundings:
Just consider the huge amount of online and offline knowledge that's simply unavailable to you for the silly reason that it's written in a language you don't understand. Should we encourage this status quo by promoting the learning of more languages so that people can generate more knowledge in more languages? Should we keep translating from the most common languages into a myriad of other languages?
How about instead we focus on one language, and better knowledge, for instance by making it as easy as possible to learn that language, and by translating knowledge into it?
Did straying away from standards ever help in the long run? Aren't you glad all power outlets are the same in your country and hate it when you can't plug your device in an incompatible outlet because you need an adapter? Language is pretty much the same: a vehicle for communicating ideas among humans. I claim that ideas are more important than language itself.
Economic studies have shown that for US English speakers, learning Spanish, French or German has a very low return on investment - between 1.5% and 4% annually. Keep in mind that learning a language is a very intensive process - high school students spend about 1/6 of their time learning foreign languages, yet only 1% of Americans claim they speak another language fluently (which suggests the number who actually do, is even smaller). So overall, learning foreign languages is an economic waste.
Learning English on the other hand, has an annual ROI of 10-20%, according to studies in Russia, Israel and Turkey.
Today, it appears that the language with the best chances of becoming the global language is English:
Modern English, sometimes described as the first global lingua franca, is the dominant language or in some instances even the required international language in communications, science, information technology, business, aviation, entertainment, radio and diplomacy. [...] A working knowledge of English has become a requirement in a number of fields, occupations and professions such as medicine and computing; as a consequence over a billion people speak English to at least a basic level. It is one of the six offici languages of the United Nations.
-- Wikipedia: English language, Significance
In the software realm, all programming languages and libraries use English keywords. Any significant software project with globally distributed developers has its comments and documentation written in English. We live in a world more and more driven by software, and the prevalence of English in software development cannot be neglected. An excellent post on this topic was written by Jeff Atwood, one of the founders of famouse programming Q&A site StackOverflow (mirror)
Generally speaking, English is the universal language on the Internet [...] The position of English can only be altered by major world-scale political and economical changes, such as increasing importance of the European Union or a coalition between Japan and China.
-- English - the universal language on the Internet?
English is without a doubt the actual universal language. It is the world's second largest native language, the official language in 70 countries, and English-speaking countries are responsible for about 40% of world's total GNP.English can be at least understood almost everywhere among scholars and educated people, as it is the world media language, and the language of cinema, TV, pop music and the computer world. All over the planet people know many English words, their pronunciation and meaning.
-- English as a Universal Language
I am talking in English because it is the modern Latin.
-- Pope John Paul II reported in the Sunday Telegraph, 1 December, 1985.
About nine-in-ten second-generation Hispanic and Asian-American immigrants are proficient English speakers, substantially more than the immigrant generations of these groups.
-- Pew, 2013
I have presented this argument in numerous public forum entries and collected the feedback. There seems to be a consensus among my opponents that everyone speaking a common language would be beneficial for humanity, but however, that language should not necessarily be English! Therefore, I'll skip expanding on why a common global language would be beneficial. I'll instead challenge my opponents to explain exactly what language should become universal, and how they'd go about teaching it to the whole world.
I'll address below several common criticisms my proposal has received; feedback is welcome. Before replying, please read my argument in its entirety, and click hyperlinks when not familiar with the hyperlinked item.
I am not advocating the propagation of English culture (particularly not pop culture). I advocate teaching English purely as a vehicle for worldwide human communication. I don't advocate my native language for this position, and I'm curious which non-English speakers would seriously advocate their own language. So far, the second best candidate would be Mandarin Chinese as a spoken language and Classical Chinese as the written form, but that's thanks to China's huge population. I don't think any Chinese speaker in their right mind would advocate learning tens of thousands of characters. China's own government realized the problem and has issued a number of simplification reforms.
We already have significantly different cultures using English, which shows that culture can be decoupled from language: India (which had to choose English over several mutually unintelligible dialects), the United States (many subcultures), the UK, Australia, Canada, South Africa, New Zealand.
The point is that for a universal language you have to either invent one, or make a pick among languages. I'll demonstrate below why I think the best pick would be English.
English is full of irregularities, its spelling is counter-phonetic (which explains why even native speakers have such a terrible time spelling it), there are all sorts of dialects from Aussie to Ebonics, and it's full of slang. If people prefer to learn Esperanto, I'm very fine with that. Interlingua would be even easier to learn. Work has also been done on simplified and normalized versions of English.
However, English is still a very simple and easy language to learn, compared to Asian languages (with the notable exception of Bahasa Indonesia). Even when compared to major Romance languages, such as French, Spanish and Portuguese, English has simpler grammar, in particular much simpler verb conjugations. English has no gender or number inflection for adjectives, articles and adverbs. More details about how much simpler English grammar really is can be found in this article by Carlos Carrion Torres.
Finally, English is (sadly for some), the most popular candidate, as I indicated in the very beginning of this article. Also,
As a non-native speaker you are always an outsider. [...] If you want to get noticed in your field, you absolutely have to publish in English.
-- from a University of Michigan article.
Dismissing this argument as ad numerum won't help with the reality of how widespread English is.
Consider this: how fun would the cyberspace be, if we still had all the disparate, incompatible networks that couldn't talk to each other, back in the dawn of the Internet? Fortunately, the Internet started using gateways to translate between these networks, until the networks understood it's much more efficient to just speak the same protocol directly.
All I'm asking is that we accelerate skipping the translation stage we're mired in nowadays. There are far more interesting regional aspects than language: culture (which is translatable to a very high degree; and that which is not translatable would not be accessible to non-speakers anyway), geography, society, cuisine, customs etc.
Indeed, some cultural aspect are hard to translate. One of them is humor. Some jokes (notably puns) just don't make sense in another language. However, most d. Here's a Romanian joke for your enjoyment:
The husband and the wife are driving in their car, mad at each other.
At one point, the pass by a bunch of pigs.
The husband points his head at the pigs: "Relatives of yours?"
The wife replies: "Yes, in-laws".
On a more serious note, let's look at how culture wouldn't be that lost, taking as an example the Chinese culture. Now, Chinese culture that's not translated in English is only accessible to Chinese speakers. For all others, it's as good as lost. If future Chinese speakers keep writing in Chinese, more culture will be lost. If, as I propose, everyone learns English as well, those Chinese writers will realize they can expose their culture to a much larger audience if they write in English.
To clarify my point: I propose mandatory education in a universal language (English, nowadays) starting with every child's general education. After 4 generations, assuming that everyone spoke the same language (be it English or Esperanto):
This is something I agree with. However, not all languages are equal. If you're keen on learning a spoken language, it has been demonstrated that Esperanto is about 6 times as beneficial to learn as English:
What Helmar Frank's research at Paderborn and for the San Marino International Academy of Sciences shows is that one year of Esperanto in school, which produces a communication ability equivalent to what the average pupil reaches in other European languages after six to seven years of study, accelerates and improves the learning of other languages after Esperanto.
-- from Propaedeutic value of Esperanto.
But, if you actually want to develop your thinking, then learning a programming language is much more beneficial to one's intellect and rigorous thinking, than learning another human language.
Below are examples I've personally encountered of how not using English is simply foolish.
This wiki is powered by a piece of software called MojoMojo, that I work on, along with other people spread all over the world. We use English in the code and documentation, and to communicate among ourselves.
Recently, a user encountered trouble, and posted his question on his blog, in Russian. How short-sighted is that?
As of a week since the user posted the question, he has not received any answers.
HAR2009 was an international security and technology conference held in the Netherlands, reuniting thousands of information technology professionals. Yet this particular restaurant advertised their pizza special deal in Dutch:
Germany's and Europe's largest automobile club, ADAC, has conducted hundreds of crash tests on hundreds of vehicles. For the informed car buyer, the car crash test results are life-saving information... in German! Since this information can be accessed for free anyway, why did ADAC not just publish it in English?
The following are not strong counter-arguments:
Ask yourself what the economy would look like if every time companies from different countries tried to work together, they had to go through translation. Would any of the Internet giants exist, if their employees could basically not communicate with one another? Heck, I'm not sure the Internet would have spread outside of the US. Does anyone remember Minitel? It was "one of the world's most successful pre-World Wide Web online services" [1]... in France, and in French.
Let's stop this post-tower-of-Babel language mess. I myself have quit my job as a translator and stopped producing any public content in Romanian. What can you do?
Point out that learning a language takes YEARS. To those who want to learn a foreign language other than English: is your life so in order, and have you accomplished all your other goals, that this is the best thing left to do?
Point out that the huge amounts spent by multi-billion dollar companies on translation would be better spent on educating children in poor countries (if you haven't clicked any link so far, click this one - it's a superb inspirational YouTube music video clip).
If you are a bilingual speaker, write all globally-relevant public content in English (even blogs about your city in Japan - there may be international tourists looking for information about it). This will also help yourself and your readership pick up more English.
When asked to translate something from English, consider imparting some English knowledge to the asker.
Encourage members of discussion groups or forums in languages other than English to join the English group if their topic is universal (e.g. computers). As a successful example, I discouraged Romanian users from discussing JavaScript in Romanian, and at some later point, that forum was closed. For a modern example (2011-Feb), see my post on the German forum of the otherwise excellent Android phone synch software MyPhoneExplorer.
If you are learning a language other than English, double-check your reasons. Learning some basic expressions is always useful, and will earn you the appreciation of the locals, but is it worth embarking on learning the whole language?
If you have the resources, or just want to experience a radically different culture (Peace Corps anyone?) consider teaching English to children:
Spread this idea!
See you in 50 years. I hope you will have made a difference. I trust that natural selection, applied to languages, will.
]]>I started writing this article as an answer on Quora, seeing how there wasn't really any good comparison between Meteor.js and the MEAN stack (MongoDB, Express, Angular, Node.js).
First off, I should mention there's no such thing as "the" MEAN stack or framework. The acronym (explained above) generically identifies using these technologies in combination. There are several implementations of the MEAN stack (a community fragmentation problem in itself). Meteor is actually a mature full-stack real-time web application platform (a framework plus a lot of utilities) that has been developed by a very well-funded and highly knowledgeable team since 2011 and has a very large community.
Meteor gives you a lot more out of the box. The client and the server communicate data updates seamlessly and automatically, without you having to write any boilerplate data sync code.
The MEAN stack is just MongoDB, Express, Angular and Node.js bundled together, but there's nothing seamless about it. You have to do all the wiring-up yourself between MongoDB and Node.js, between Express and Angular, create REST endpoints and consume them etc. - all this just to get a basic web app going, without any features that Meteor gives you for free: hot code reload, mobile development (web, Android and iOS apps from the same code base), reactive templates that update automatically when data on the server changes (try to write code for that manually and make it run correctly over intermittent network connections, and make sure it's secure), session management, packages that can install components both on the server and on the client (e.g. server-side autocomplete - you won't find this anywhere else; Twitter's Typeahead and the like are client-only solutions).
With the MEAN stack, when you make a REST request for a table/collection, you're essentially saying "Send me the results of this query". With Meteor, you subscribe to the results of that query, and any newly created or modified documents that matched will be automatically sent to the client over a fast WebSocket connection.
Thanks to its isomorphic APIs (the same methods work on the client and the server, e.g. HTTP.call
), Meteor makes it easier for one developer to build an entire full-stack app, or for a team to have a better understanding of the code base across the project. The MEAN stack adds to the separation between the server and the client due to different APIs being used.
Meteor's server side runs on top of Node.js but eliminates callback hell by using Fibers. Even on the client, you can avoid callbacks and even promises by using reactivity via the simpler Tracker and Reactive Method packages.
In Meteor, your server code runs in a single thread per request, not in the asynchronous callback style typical of Node. We find the linear execution model a better fit for the typical server code in a Meteor application.
Guillermo Rauch, the well-known author of Socket.IO, has written an excellent article call "7 Principles of Rich Web Applications". He's also delivered a talk at BrazilJS about the principles:
Meteor implements #2, #3, #4 and #6 for the developer. #1 (server-rendered pages) and #5 (enhance history) are handled by ecosystem packages (Spiderable, Server-Side Rendering, and Iron Router). (#7 as described by Rauch, isn't really in the purview of full-stack frameworks.) By comparison, the MEAN stack needs to be coupled with Socket.IO to even have the pieces to implement these principles - Meteor already has them all glued together.
Meteor also has the entire toolchain built-in, from compiling Coffeescript automatically to minifying and concatenating CSS and JS. Within seconds from saving a file, all client web browsers will automatically reload and re-render the app thanks to hot code push (#6 above). The UI state (form inputs, scroll position, selection) is preserved (another fun thing to try to get right with the MEAN stack).
Meteor = MEAN stack + Socket.IO + grunt/gulp + Cordova + hot code reload + a lot more.
Such as extremely convenient packages - one of the "Eureka" moments with Meteor is when authentication with user/password, Google, Facebook and Twitter is added just by including a package for each OAuth provider and one line of template code to indicate where to place the login widget:
meteor add accounts-facebook
// then add {{> loginButtons}} in your template to show the login UI
Meteor has over 4,3000 packages. MEAN.JS has only one module so far, for SEO. Meteor lets you deploy with one command to free hosting at yourapp.meteor.com. MEAN.io doesn't support deploying yet.
But isn't that a lot to take in all at once? Actually, not. Thanks to Meteor's focus on simplicity (one of its Seven core principles), Meteor in its entirety is far easier to learn than Angular alone. Many have found Angular to be a pain to learn and ended up frustrated - see An Unconventional Review of AngularJS:
Angular is... band-aids over self-inflicted wounds
You can get the basics on Meteor in just one hour - head over to http://meteor.com/try. Meteor's documentation is also very well-written. By comparison, the documentation for the MEAN.io stack is in such a shape that today I went through the Packages section and found an embarrassing number of typos in just a few minutes, all within two pages of the documentation. Packages seem to have no documentation, either. And not to discredit the authors, but you can't easily find who the core team is - the link in Credits is broken. The documentation for the alternative, the MEAN.JS fork, starts with,
After downloading the source code go over the official documentation of MongoDB, ExpressJS, AngularJS, and Node.js, then continue with the MEAN.JS Documentation.
Given that it really takes only one hour to make something useful with Meteor, from scratch, it's worth simply giving it a try first, to have a reference before starting to learn MEAN.io or MEAN.JS.
Of course, you'll still need to learn MongoDB well for a production app, but Meteor doesn't send you there to get started. The 80% most common cases of using Mongo are already explained in the Meteor documentation.
Meteor also saves you from having to research what libraries to use for the various layers of the application (transport, data synchronization, API, security, CRUD operations, templating etc.). All the pieces that make up Meteor function together very well.
By contrast, when considering the MEAN stack, you start with the choice between MEAN.io and MEAN.JS. The short story is that the main MEAN.io contributor, Amos Haviv, Forked out of an open-source conflict in January 2014. You can read more about the story and differences on StackOverflow. This has split the community into ~6k GitHub stars for .io and ~2k for .js. Meteor by comparison has 23,000 GitHub stars.
On StackOverflow, right now there are over 10,000 questions tagged meteor, and about 1,100 total tagged mean, mean.io and meanjs
More more details on the community size, see the Community section in Why Meteor?.
As with any tool, Meteor is not always the right solution. I've expanded on when not to use Meteor in the corresponding section of my Why Meteor? article (e.g. when you're building a client-only app, or when you require interfacing with databases other than MongoDB). To compare apples to apples, have in mind that the MEAN stack includes a server and MongoDB. So let's see when a MEAN stack might be a better choice for a new web application:
I've found that Meteor saved me from a lot of analysis paralysis, besides making me a ton more productive than if I had to put together the pieces in the MEAN stack. My suggestion is to read a bit on Why Meteor could be a good choice or not, give it a try first for one hour (meteor.com/try), then look at the MEAN stacks, and see which would work best for your project.
PS: skip to 44:30 in Guillermo's talk above. Someone asks him about Meteor. A month later:
]]>love [Meteor] too <3
-- https://twitter.com/rauchg/status/522228968074661889
I have seen over the years hundreds of articles and blog posts on how to be more productive, more motivated, manage time better, and how to combat procrastination more effectively. But most of these ideas are just too obvious to work. Like, "reward yourself" or "have a positive attitude". Everybody knows that. And let's not even get into studies that show how no controlled scientific study has ever found a long-term enhancement of the quality of work as a result of any reward system.
Here is a list of the best ideas I've culled over the years on fighting procrastination, being more productive, and becoming more motivated.
There are multiple reasons for this:
It's easy to try this out. Go to a coffee shop where people work away on their laptops, and see if you get more or less work done than in your "favorite" setting.
"Right or wrong action, they take it. Either way it's always better than making no decisions and taking no action at all. As Franklin Roosevelt said:"
It is common sense to take a method and try it. If it fails, admit it frankly and try another. But above all, try something.
-- from Why some people almost always are successful
As soon as you've decided what is most important, get working.
-- from 15 Tips for Surviving a Task Explosion
Have you noticed how accomplishments tend to happen in clusters? When you get something done, use the momentum, harness the joy of the achievement, and proceed to doing the next thing, right away. If possible, have high-BPM music in the background. If you need a break, take an active one.
Taking long breaks from a project makes it hard to get back in the groove. Try to do something every (other) day.
Steve Pavlina explains timeboxing as allocating a finite amount of time for:
The brain dislikes unfinished tasks and craves closure (the so-called Zeigarnik effect). So when the time comes to go to sleep or go to a meeting, do so enthusiastically, because:
This way you can kill the "maker vs. manager time" dread of interruptions! For the best effect, interrupt on a high note ("when the going is good")
I never come back to a blank page; I always finish about halfway through. To be confronted with a blank page is not very nice. But Hemingway, a great American writer, taught me the finest trick when you are doing a long book, which is, he simply said in his own words, "When you are going good, stop writing. And that means that if everything's going well and you know exactly where the end of the chapter's going to go and you know just what the people are going to do, you don't go on writing and writing and writing until you come to the end of it, because when you do, then you say, well, where am I going to go next? And you get up and you walk away and you don't want to come back because you don't know where you want to go. - Roald Dahl
I think this is a pretty huge factor. A lot of us back down when we don't want to do something, even though it may eventually bring us to a wonderful experience or goal. Successful people may not always like doing some of the things they have to do. But they do them anyway. And in the longer run that makes all the difference.
-- from Why some people almost always are successful
Instead of trapping themselves in doing productive but not so important tasks or projects they realize what's most important and do that. And after they're done with that, they do what's most important again. Instead of just doing a lot of things, they think and plan before they act, and try to focus as much as possible of their thoughts and actions on those few very important things.
-- from Why some people almost always are successful
Many of [the successful people] don't seem to multi-task. Some reasons for avoiding that may be that it creates internal confusion, wastes time and spreads the multi-tasker too thinly. Instead, they do one thing and focus on that until it is done. Then they do the next thing until it is done. Focusing 100% on one task at a time will get it done quicker and better.
See also the various research conducted on the impact of distractions and multitasking:
-- from Why some people almost always are successful
Think of a magician.
The psychology of impressiveness reveals that people are more impressed by someone who makes them ask "how did he do that?" than someone who has a sizable laundry list of standard activities. Achieving the former, fortunately, requires less time - and significantly less stress - than achieving the latter. [...] stress comes from having too many obligations pulling at your time. The principle of underscheduling prevents this situation from occurring.
Successful people tend to see failure as useful feedback. They may not like to fail, but they don't fear it - or at least they have little fear of it - and they know that if they fail they've been there before and they can start over again and succeed.
-- from Why some people almost always are successful
In the particular case of software development, it's known{{citation needed}} that rewriting from scratch a project takes an order of magnitude less time than it took in the previous attempt. Also, the code is much cleaner, because now the team already has a complete vision of the entire product before they even start writing the first line of code.
Believe it or not, this was a lesson that I learned from playing the Massive Multiplayer Online Role-Playing Game "Final Fantasy XI." I played FFXI an average of four hours a day for three years. The game kept track of the total "playtime" I collectively spent logged in. After three years, my total playtime value amounted to over 180 days.
It's difficult to explain the significance of how I felt when I realized how much time I had invested playing a video game. "Invested" is a sly word to use for this story - because a more accurate word would be "wasted."
I wasted 180 days of my life playing this video game.
180 days!? The things I could accomplish in that much time!
If I spent that much time exercising, I would be physically fit.
If I spent that much time learning a second language, I would be fluent in it.
If I spent that much time writing, I would have written a book.
If I spent that much time doing anything constructive, I would've improved my life.
-- from The Power of an Hour
I've found that lemon juice with a teaspoon of instant coffee mixed in is an arguably strange concoction, but it plugs me in. Surprisingly energizing (if it makes you twitch or gives you goosebumps, you've got the right concentration), and get me crackin'.
Something else that works, though not as well as the lemon juice + coffee combo, is Trader Joe's Dark Chocolate-covered Espresso Beans. I'd have 5-10 of those in the morning.
Many people report that exercise makes them more focus and productive. I haven't been able to disentangle that from showering, because I shower after intense exercise, but showering alone also helps to "wake me up".
Earplugs also help me stay focused and "in the zone".
This is a recent discovery (Q1 2014): I've found that after attending a 2-hour comedy improv workshop, my brain stays primed for 12-24 hours to think more quickly, more creatively, be more productive, and also tackle tasks I had been putting off.
For example, I'd start writing that has been postponed for a week or more, and I won't stop for several hours. Code quality tends to be higher than normal too.
How many times have you heard the productivity advice of rewarding yourself for getting something done? The truth (established by rigorous social science experiments) is that rewards improve productivity only for mechanical tasks or for tasks that don't require much cognitive ability. Various authors mention this as one of the most consistently reproduced finding of social sciences, and one of the most ignored. Indeed, businesses offer all sorts of incentives for high performance, but those incentive have been shown to reduce performance. See for details Daniel Pink's 2009 TED talk The Surprising Science of Motivation and Alfie Kohn's 1998 article Challenging Behaviorist Dogma: Myths About Money and Motivation.
This has been replicated over and over and over again for nearly 40 years. These contingent motivators (if you do this, then you get that) work in some circumstances, but for a lot of tasks, they actually either don't work, or often, they do harm. This is one of the most robust findings in social science, and also one of the most ignored.
-- Daniel Pink
Rewards narrow our focus, and that's why they work for mundane tasks, but for the 21st century, solutions (to the extent they even exist) are surprising, non-obvious and at the periphery ("outside the box"). Pink goes on to propose a solution, a new operating system for businesses:
It's an approach built much more around intrinsic motivation
Around the desire to do things because they matter,
because we like it,
because they're interesting,
because they're part of something importantThree elements [are required]:
Autonomy - the urge to direct our own lives
Mastery - the desire to get better and better at something that matters
Purpose - the yearning to do what we do in the service of somethig larger than our selves
Fungibility is the ability of a unit of a commodity to be equivalent to another unit of the same commodity. One brick is pretty much always equivalent to another brick of the same type. One hour is usually not as productive as any other hour. This goes directly against "The power of an hour" above. Quote from Aaron Swartz's blog "HOWTO: Be more productive":
"With all the time you spend watching TV," he tells me, "you could have written a novel by now." It's hard to disagree with the sentiment - writing a novel is undoubtedly a better use of time than watching TV - but what about the hidden assumption? Such comments imply that time is "fungible" - that time spent watching TV can just as easily be spent writing a novel. And sadly, that's just not the case.
Time has various levels of quality. [...] And it's tough to focus when you keep getting interrupted. There's also a mental component: sometimes I feel happy and motivated and ready to work on something, but other times I feel so sad and tired I can only watch TV.
If you want to be more productive then, you have to recognize this fact and deal with it. First, you have to make the best of each kind of time. And second, you have to try to make your time higher-quality.
Again from Aaron's blog, under the heading "Procrastination and the mental force field":
What is procrastination? To the outside observer, it looks like you're just doing something "fun" (like playing a game or reading the news) instead of doing your actual work. (This usually causes the outside observer to think you're lazy and bad.) But the real question is: what's going on inside your head?
I've spent a bunch of time trying to explore this and the best way I can describe it is that your brain puts up a sort of mental force field around a task. Ever play with two magnets? If you orient the magnets properly and try to push them towards each other, they'll repel fiercely. As you move them around, you can sort of feel out the edges of the magnetic field. And as you try to bring the magnets together, the field will push you back or off in another direction.
The mental block seems to work in the same way. It's not particularly solid or visible, but you can sort of feel it around the edges. And the more you try to go towards it the more it pushes you away. And so, not surprisingly, you end up going in another direction.
And just as you can't get two repelling magnets to sit together just by pushing real hard - they'll fling back as soon as you stop pushing - I've never been able to overcome this mental force field through sheer willpower. Instead, you have to be sneaky about it - you have to rotate a magnet.
So what causes the mental force field? There appear to be two major factors: whether the task is hard and whether it's assigned.
Aaron goes on about how to tackle hard tasks:
As for assigned problems,
Assigned problems are problems you're told to work on. Numerous psychology experiments have found that when you try to "incentivize" people to do something, they're less likely to do it and do a worse job. External incentives, like rewards and punishments, kills what psychologists call your "intrinsic motivation" - your natural interest in the problem. (This is one of the most thoroughly replicated findings of social psychology - over 70 studies have found that rewards undermine interest in the task.) People's heads seem to have a deep avoidance of being told what to do.
The weird thing is that this phenomenon isn't just limited to other people - it even happens when you try to tell yourself what to do! If you say to yourself, "I should really work on X, that's the most important thing to do right now" then all of the sudden X becomes the toughest thing in the world to make yourself work on. But as soon as Y becomes the most important thing, the exact same X becomes much easier.
Create a false assignment
This presents a rather obvious solution: if you want to work on X, tell yourself to do Y. Unfortunately, it's sort of difficult to trick yourself intentionally, because you know you're doing it. So you've got to be sneaky about it.
One way is to get someone else to assign something to you. The most famous instance of this is grad students who are required to write a dissertation, a monumentally difficult task that they need to do to graduate. And so, to avoid doing this, grad students end up doing all sorts of other hard stuff.
The task has to both seem important (you have to do this to graduate!) and big (hundreds of pages of your best work!) but not actually be so important that putting it off is going to be a disaster.
Don't assign problems to yourself
It's very tempting to say "alright, I need to put all this aside, hunker down and finish this essay". Even worse is to try to bribe yourself into doing something, like saying "alright, if I just finish this essay then I'll go and eat some candy". But the absolute worst of all is to get someone else to try to force you to do something.
Make things fun
Hard work isn't supposed to be pleasant, we're told. But in fact it's probably the most enjoyable thing I do. Not only does a tough problem completely absorb you while you're trying to solve it, but afterwards you feel wonderful having accomplished something so serious.
So the secret to getting yourself to do something is not to convince yourself you have to do it, but to convince yourself that it's fun. And if it isn't, then you need to make it fun.
Notice how many hours you can work per week, without getting burned out (crunch mode doesn't work). Then set your target hours at a little below that X, and make sure you don't exceed it most weeks. That will leave time for other things in life (friends, family, exercise, fun etc.) and it's a pace you can sustain indefinitely.
Those X hours per week will include work time without much output (the 80/20 rule will apply to meetings, email etc.). however, you must figure those hours in. Interestingly, many geniuses have reported that they only do highly-focused work for about four hours per day. If you internalize that you can only do high-quality work for 4 hours a day, that can be quite liberating:
Try to get an idea about how much work you can do on the average over a week or month: how many emails you can answer, how much code you can write, or whatever the task is that you're involved in. When you see that the amount of work times your speed simply exceeds X, the number of hours you've dedicated to working, you must cut back on tasks. Saying "No" may be hard and is a separate problem, but you must do this. Identify the value of tasks (again, use the 80/20 rule) and cut those of lowest value. Your work capacity is finite, and so is your life (for the medium-term future, at least).
]]>var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
// WebDriver initialization code above
describe('basic test', function () { // test framework code - test organization
it('should be on correct page', function (done) { // test framework code - one test
driver.get('http://google.com'); // WebDriver command
driver.getTitle().then(function (title) { // WebDriver command
expect(title).toBe('Google'); // test assertion
done(); // test framework code signalling end of async test
driver.quit(); // WebDriver command
The `test framework` lines pertain to [Jasmine](http://jasmine.github.io). The `expect` line is an assertion. Jasmine includes assertions, but some test frameworks, such as Mocha, don't, and you can use any assertion library you want, such as [Chai](http://chaijs.com). The other lines of code are calls to the WebDriver Node.JS library, in this case [selenium-webdriver](#selenium-webdriver).
## Node.JS WebDriver client libraries compared
There are again at least [7 interesting WebDriver client libraries implemented in Node.js](http://www.slant.co/topics/2814/~what-are-the-best-node-js-selenium-webdriver-client-libraries-bindings). Let's start to eliminate choices.
Since we want to use BDD for testing, we'll look for libraries that officially support Cucumber. That [excludes Nightwatch](https://github.com/nightwatchjs/nightwatch/issues/22#issuecomment-34429738) despite it [taking care of more boilerplate than WebdriverIO](https://github.com/webdriverio/webdrivercss/issues/14#issuecomment-54165582). It also excludes the fantastically well-developed [Intern, until it implements Cucumber support](https://github.com/theintern/intern/pull/196).
We are left with five candidates, of which we can skip two early on:
* WD.js - [dropped by Intern](https://theintern.github.io/leadfoot/) in favor of building their own WebDriver implementation
* Testium - from Groupon, but has a [pretty incomplete implementation of the WebDriver protocol](http://www.slant.co/topics/2814/viewpoints/6/~what-are-the-best-node-js-selenium-webdriver-client-libraries-bindings~testium)
Below are the final three.
### [selenium-webdriver](https://github.com/SeleniumHQ/selenium/tree/master/javascript/node/selenium-webdriver)
This is the official implementation, with a rather rubbish syntax/API. [Documentation](http://selenium.googlecode.com/git/docs/api/javascript/index.html), [wiki](https://github.com/SeleniumHQ/selenium/wiki/WebDriverJs).
### [WebdriverIO](http://webdriver.io/)
WebdriverIO (formerly WebdriverJS) has a [much simpler syntax than selenium-webdriver](https://github.com/webdriverio/webdriverio/issues/138):
Chaining commands is easy, [thanks to WebdriverIO using Chainit](https://github.com/webdriverio/webdriverio/issues/428#issuecomment-74320263), a mechanism similar to [selenium-webdriver's ControlFlow](https://code.google.com/p/selenium/wiki/WebDriverJs#Control_Flows). You don't have to end up in callback hell.
WebdriverIO also lets you use any testing framework you want and has [examples](https://github.com/webdriverio/webdriverio/tree/master/examples) for Cucumber, Jasmine and Mocha. One downside is that you have to [launch Selenium yourself](https://github.com/webdriverio/webdriverio/blob/master/.travis.yml#L21). `selenium-standalone` helps with that, but it's a bit [slower than selenium-webdriver](https://github.com/vvo/selenium-standalone/issues/115).
### [webdriver-sync](https://github.com/jsdevel/webdriver-sync)
It has a *synchronous* syntax which is very nice:
title = driver.getTitle();
link = driver.findElement(By.id('i am a link'));
assert(driver.getCurrentUrl().indexOf('foo title 2') > -1);
title.should.equal('foo title');
Yet it still uses the selenium-webdriver `driver.findElement(By....` syntax.
Since there are [efforts](https://gitter.im/webdriverio/webdriverio?at=55c09a2c2c1b3bec31988bbe) to [implement sync in WebdriverIO](https://github.com/meteor-velocity/velocity/issues/254#issuecomment-127039842), and you can already [use yield](https://github.com/webdriverio/webdriverio/issues/367#issuecomment-105345635), we can consider WebdriverIO as a winner. It's also actively developed, has a Gitter chatroom where the main developer (who works at SauceLabs) answers questions promptly, and has recently passed 1,000 GitHub stars.
## Refinements
> If you have WebDriver APIs in your test methods, You're Doing It Wrong.
> -- Simon Stewart.
If your tests simply look for elements by ID or class name, then interact with them, and you change the underlying HTML code, you'll have to repeat that change in every test that accesses elements using those constants. The problem is essentially the same as repeating constants in your code instead of declaring a `const`.
To avoid this, a pattern called [`PageObject`](http://martinfowler.com/bliki/PageObject.html) can be used. It abstracts interactions with pages from a user's perspective, hiding implementation details to reduce duplicated code and make tests easy to update when the UI changes.
Here's an example from the [Moonraker](https://github.com/LateRoomsGroup/moonraker#page-objects) test framework:
// tests/pages/home.js
var Page = require('moonraker').Page;
module.exports = new Page({
url: { value: '/' },
txtSearch: { get: function () { return this.element("input[id='txtSearch']"); } },
btnSearch: { get: function () { return this.element('btn-primary', 'className'); } },
searchFor: { value: function (query) {
Each page has a URL and any convenient methods that you may require. You can then use your page objects in your step definitions:
// tests/steps/home-search-steps.js
var homePage = require('../pages/home'),
searchResults = require('../pages/search-results');
exports.define = function (steps) {
steps.when("I search for '$query'", function (query) {
// Or use homePage.searchFor(query);
Note that "PageObject" doesn't mean you should have only one object per page. A more accurate name could be "PanelObject", but the term "PageObject" has been [popularized by Selenium](https://code.google.com/p/selenium/wiki/PageObjects). Another benefit of using the PageObject pattern is that it makes the test code easier to understand because its logic is about the intention of the test and not cluttered by UI details.
## Putting it all together
WebdriverIO itself [doesn't yet have a best practice for using the Page Object pattern](https://github.com/webdriverio/webdriverio/issues/583), and its [Cucumber boilerplate](https://github.com/webdriverio/cucumber-boilerplate) actually uses Yadda. Moonraker uses selenium-webdriver with its complex syntax. Wouldn't it be nice if there were some package that integrated Selenium, WebdriverIO, CucumberJS and the Page Object pattern? Well, there is - [ChimpJS](http://chimpjs.com).
Chimp integrates CucumberJS, Selenium, WebdriverIO and Chai, and has some [really neat features](https://chimp.readme.io/docs):
* synchronous style
* built-in "widget framework" ([an implementation of the PageObject pattern](https://github.com/xolvio/chimp-widgets/issues/3))
* automatically downloads dependencies (ChromeDriver, PhantomJS etc.)
* works with SauceLabs and BrowserStack (CrossBrowserTesting TBD)
* automatically takes screenshots on failures
* works on Windows in addition to Linux and OS X
* Cucumber automatically outputs boilerplate code for undefined steps, which you can copy, paste and edit
* file watcher reuses the browser sessions and automatically re-runs tests when you save
* using `@watch` tags, you can run only the tests you tag, to maximize development speed
* works with continuous integration services like Travis or CircleCI
* is used by xolvio:cucumber, the preferred package for Velocity, which is the official test framework for the [[/essays/why_meteor|excellent Meteor platform]].
Check out the Chimp video:
UI automation is a difficult domain to work in, and there aren't any magic "best practices" other than one: use your brain.
-- Jim Holmes, VP of Testing at Falafel Software
Okay, that's not really helpful. Let's do something about it. We'll build a logical progression from "I'm lost" to "I know what tools to use and what code to write". We'll also skip over unnecessary steps and obsolete technologies so you'll end up using the current best practices (as of 2015) - much like many African nations have skipped landlines to go from no electronic communications infrastructure to wireless 4G.
This article will take you from very little knowledge about automated acceptance testing for web applications, to having a good understanding of the best practices as of 2015, and how to get started quickly. It includes a comparison of Node.js WebDriver client libraries, cloud-based cross-browser testing services, and test framework considerations.
To build a reliable web app and prevent regression bugs, you need automated tests. These tests should cover the critical paths of your app as taken by a real user using a real browser. For example: after adding the latest feature, can the user still log in and check out their shopping cart? Other than that, you also need unit tests for your app's modules, but those are usually easier to reason about given the much more limited scope.
In terms of methodology, the most modern testing+development approach is BDD (Behavior-Driven-Development), which is the successor of TDD (Test Driven Development).
Since JavaScript is rapidly becoming the best language for building web apps (especially with the advent of ES2015), this post will focus on testing web applications built with JavaScript, using BDD.
The goal is to cut through the confusion and enable you to make a clear choice among the multitude of players in the automated web app testing arena: BDD, TDD, Jasmine, Cucumber, Gherkin, Mocha, Chai, QUnit, WebDriver, Selenium RC, webdriver-sync, PhantomJS, CasperJS, ZombieJS, SlimerJS, WebDriverIO, SauceLabs, BrowserStack, TestingBot, CrossBrowserTesting etc.
BDD is the next step after TDD, created with the goal of giving more structure to tests. If we aim for reducing the paradox of choice, then this is an easy one: BDD wins for making your app testing more future-proof and easier to collaborate across the organization. If your app is very small, you may not benefit much from BDD, but it's a useful skill to pick up.
BDD tests are written in a language similar to English, called Gherkin. What really happens is that a BDD test framework such as Cucumber or Yadda will parse the Gherkin files against regular expressions, then execute assertions.
Why you'd want to use Gherkin is explained very well in Why use user story based testing tools like Cucumber instead of other TDD/BDD tools?. Here's an example:
Feature: One-line description of the featureAnything can be used here to provide context for this specification.
You may want to use the story format below.As an <actor>
I want <feature>
So that <benefit>Background: The background is optional
Given something that happens before every scenario
And something else that happens before every scenario@AnotherTag
Scenario: One-line description of the scenario
Given some pre-condition with a parameter "myParam"
And another pre-condition
When an event is triggered
Then an expected result happens
But an unexpected result does not happen
Note that Cucumber is more than a testing tool; it's actually best used as a collaboration tool between business stakeholders, developers, and QA folks. A tool called Yadda is preferred by some over CucumberJS. Yadda's advantages aren't clearly presented in its README, beyond being "less invasive" and having a more "flexible syntax" than Gherkin, and "smarter conflict resolution". From Yadda's raison d'etre post:
The only true BDD tool I found during my search was CucumberJS. The most popular tools, Jasmine, Mocha, Vows, Chai, should.js are proclaimed as BDD, but they're not.
-- Stephen Cresswell, author of Yadda, an alternative to CucumberJS
Neither Cucumber nor Yadda provide an assertion library. Chai and Chai-as-promised are most frequently used with both.
Ideally the tests you write should be applicable without change to a headless browser first, so you can quickly validate functionality as you develop, and then to a bunch of real browsers automated via Selenium to check cross-browser compatibility. This is possible thanks to WebDriver, an API that can "send tests" to various browser implementations, including Chrome, Firefox, PhantomJS, or some mobile browsers.
If you're new to testing, you might be confused by the choice of technologies. Here's the key info:
To automate tests, you need browsers to automate. Ideally you would write test scripts and have them run on various browsers to test your app for cross-browser compatibility. You can do this locally if you have multiple combinations of OSes and browsers and mobile devices, or you can run testing in the cloud. There are at least four decent cloud-based cross-browser testing providers:
Check the Slant link above for more pros and con about each.
To automate browsers, there's pretty much only one solid choice (thankfully) - Selenium. Selenium is a set of tools that includes:
For web applications developed in JavaScript, it makes sense to use a JavaScript Selenium WebDriver client, even though Selenium development has been traditionally done in Java. There are (at least) three categories of Node.JS libraries for using Selenium:
When does it make sense to use each, and which are the most effective Selenium Node.JS clients?
First off, let's note that WebDriver clients only implement the JSON Wire WebDriver Protocol (which is used to control a browser), and connect to a WebDriver server (either local, such as ChromeDriver, or remote). The communication happens over HTTP, via POST requests. For example, to click an element in the browser, the WebDriver client will send POST request to /session/:sessionId/element/:id/click
In turn, the WebDriver server communicates with the browser, using apparently yet another protocol.
To automate tests, besides a WebDriver client and a WebDriver server, you'll also need a testing framework (for JavaScript, popular ones include Jasmine, Cucumber, Mocha, QUnit) and an assertion library (Chai for Mocha; other testing frameworks usually include the assertion library). Here's a piece of code that highlights each of these components:
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
// WebDriver initialization code above
describe('basic test', function () { // test framework code - test organization
it('should be on correct page', function (done) { // test framework code - one test
driver.get('http://google.com'); // WebDriver command
driver.getTitle().then(function (title) { // WebDriver command
expect(title).toBe('Google'); // test assertion
done(); // test framework code signalling end of async test
driver.quit(); // WebDriver command
The test framework
lines pertain to Jasmine. The expect
line is an assertion. Jasmine includes assertions, but some test frameworks, such as Mocha, don't, and you can use any assertion library you want, such as Chai. The other lines of code are calls to the WebDriver Node.JS library, in this case selenium-webdriver.
Notice how the getTitle()
There are again at least 7 interesting WebDriver client libraries implemented in Node.js. Let's start to eliminate choices.
Since we want to use BDD for testing, we'll look for libraries that officially support Cucumber. That excludes Nightwatch despite it taking care of more boilerplate than WebdriverIO. It also excludes the fantastically well-developed Intern, until it implements Cucumber support.
We are left with five candidates, of which we can skip two early on:
Below are the final three.
This is the official implementation, with a rather rubbish syntax/API. Documentation, wiki.
WebdriverIO (formerly WebdriverJS) has a much simpler syntax than selenium-webdriver:
Chaining commands is easy, thanks to WebdriverIO using Chainit, a mechanism similar to selenium-webdriver's ControlFlow. You don't have to end up in callback hell.
WebdriverIO also lets you use any testing framework you want and has examples for Cucumber, Jasmine and Mocha. One downside is that you have to launch Selenium yourself. selenium-standalone
helps with that, but it's a bit slower than selenium-webdriver.
It has a synchronous syntax which is very nice:
title = driver.getTitle();
link = driver.findElement(By.id('i am a link'));
assert(driver.getCurrentUrl().indexOf('foo title 2') > -1);
title.should.equal('foo title');
Yet it still uses the selenium-webdriver driver.findElement(By....
Since there are efforts to implement sync in WebdriverIO, and you can already use yield, we can consider WebdriverIO as a winner. It's also actively developed, has a Gitter chatroom where the main developer (who works at SauceLabs) answers questions promptly, and has recently passed 1,000 GitHub stars.
If you have WebDriver APIs in your test methods, You're Doing It Wrong.
-- Simon Stewart.
If your tests simply look for elements by ID or class name, then interact with them, and you change the underlying HTML code, you'll have to repeat that change in every test that accesses elements using those constants. The problem is essentially the same as repeating constants in your code instead of declaring a const
To avoid this, a pattern called PageObject
can be used. It abstracts interactions with pages from a user's perspective, hiding implementation details to reduce duplicated code and make tests easy to update when the UI changes.
Here's an example from the Moonraker test framework:
// tests/pages/home.js
var Page = require('moonraker').Page;
module.exports = new Page({
url: { value: '/' },
txtSearch: { get: function () { return this.element("input[id='txtSearch']"); } },
btnSearch: { get: function () { return this.element('btn-primary', 'className'); } },
searchFor: { value: function (query) {
Each page has a URL and any convenient methods that you may require. You can then use your page objects in your step definitions:
// tests/steps/home-search-steps.js
var homePage = require('../pages/home'),
searchResults = require('../pages/search-results');
exports.define = function (steps) {
steps.when("I search for '$query'", function (query) {
// Or use homePage.searchFor(query);
Note that "PageObject" doesn't mean you should have only one object per page. A more accurate name could be "PanelObject", but the term "PageObject" has been popularized by Selenium. Another benefit of using the PageObject pattern is that it makes the test code easier to understand because its logic is about the intention of the test and not cluttered by UI details.
WebdriverIO itself doesn't yet have a best practice for using the Page Object pattern, and its Cucumber boilerplate actually uses Yadda. Moonraker uses selenium-webdriver with its complex syntax. Wouldn't it be nice if there were some package that integrated Selenium, WebdriverIO, CucumberJS and the Page Object pattern? Well, there is - ChimpJS.
Chimp integrates CucumberJS, Selenium, WebdriverIO and Chai, and has some really neat features:
tags, you can run only the tests you tag, to maximize development speedCheck out the Chimp video:
Next, go through the tutorial to get started.
That's it - use Chimp. I was surprised at how easy everything is with Chimp, and it's one of those little known (only 21 GitHub stars at the moment) diamonds in the rough that can really speed up your development - if you know about it.
Now you do.
Here are the articles I have summarized and coalesced into this one. None of those mentioned Chimp, but they're what shows up when you Google for combinations of "WebdriverIO", "Cucumber" and the like.
Atlas V long exposure. Photo from spaceflightnow.com.
Last night, 2010-Sep-20, at 9:03pm PDT, an Atlas V rocket was launched from Space Launch Complex 3 at Vandenberg Air Force Base, California. I watched the launch 14 kilometers away from the launch pad, from a publicly accessible abandoned road: Camellia Ln, Vandenberg AFB, Santa Barbara, CA 93437. The experience was almost magical: the rocket silently lifted off, and majestically rose towards the sky. Only about half a minute later did the roar of the engines reach us.
Watching a rocket launch is an experience I would definitely like to have again, and I hope this post will help you enjoy it as well.
Note that Vandenberg Air Force Base is a military facility, and it's not easy to get close to the launch. You can though pay really close attention. This is why I recommend fully taking it in and not bothering trying to take pictures or recording the launch. There will be professional photographs and videos online. For example, here are official pictures of the launch I watched and the official video.
Check the Vandenberg AFB launch schedule for launch dates and pads. Note that the schedule is not always updated (for example, two days after the launch, the time still wasn't announced), so cross-check on Spaceflightnow for times of launches at Vandenberg. The most spectacular launches are those that take place shortly after sunset. The rocket will climb into sunlight and its exhaust plume will be beautifully illuminated. Two hours after sunset was almost too long for the plume to be illuminated, but I could still see some illumination (9:03pm, sunset at 7pm).
While spacearchive.info has some good information about viewing launches, the viewing locations it lists are very far from AFB (50+ kilometers). Remember that at 16 kilometers away (10 miles), a ~60-meter rocket (Delta IV or Atlas V), will appear as small as a finger held at arm's length. Distance matters.
Pick a viewing spot close to the launch pad. See in the schedule what launch pad the rocket or missile will be launched from. The AFB is quite large and its active launch pads are spread North-South over 16 kilometers. Refer to my map of Vandenberg AFB launch pads and viewing locations below.
If you know of better spots to watch the launches from, or can confirm some on the map, please let me know.
View Vandenberg AFB launch pads and viewing locations in a larger map
One really good spot is Surf Beach, only 3 miles from SLC-4, where Space X is going to launch its a Falcon 9 FT rocket on January 14, 2017. It's also ~6 miles from SLC-6, and was a good spot for a large crowd to watch the Jan 20, 2011, Delta IV launch. There is an Amtrack station that lets you off right at the beach. The beach is open to anyone, not just military personnel.
Just in case, do a web search for official launch parties or spots closer to these. The Air Force Base could organize paid launch events, but given the high likelihood of launches being cancelled or delayed, they probably don't want to bother.
Follow the mission status updates at http://www.spaceflightnow.com for last-minute delays and suspenseful or cool announcements.
Since Internet coverage is lacking in the area (at least for T-Mobile), it's best to sign up for Twitter updates delivered via SMS (you don't need to be a Twitter user), by sending a text message to 40404:
follow @SpaceFlightNow
Here were the status updates for this Atlas V launch:
8:24 p.m. local (11:24 p.m. EDT)
HOLD EXTENDED. Officials have announced to reporters that a sweep revealed a private vehicle at the SLC 8 pad south of the Atlas complex. That has prompted a launch hold to ensure no personnel are in the restricted area.
8:31 p.m. local (11:31 p.m. EDT)
NEW LAUNCH TIME. An additional five minutes have been inserted into this hold. That puts liftoff time at 8:41:30 p.m., if the clearance is granted.
8:35 p.m. local (11:35 p.m. EDT)
HOLD EXTENDED AGAIN. Five more minutes are being added to the hold, pushing liftoff to 8:46:30 p.m.
8:44 p.m. local (11:44 p.m. EDT)
HOLD EXTENDED AGAIN. Five more minutes added, pushing launch to no sooner than 8:56:30 p.m.
8:48 p.m. local (11:48 p.m. EDT)
NEW LAUNCH TIME. Officials have retargeted liftoff for 9:03:30 p.m.
8:50 p.m. local (11:50 p.m. EDT)
There are no technical problems being worked in the countdown. It's just a matter of ensuring the safety of all personnel before proceeding with the liftoff tonight.
8:53 p.m. local (11:53 p.m. EDT)
Officials are optimistic that this latest target launch time is going to happen. Atlas it aiming for 9:03:30 p.m.
8:55 p.m. local (11:55 p.m. EDT)
Now 8 minutes away from the scheduled launch time. The final readiness polls will be performed shortly.
8:56 p.m. local (11:56 p.m. EDT)
The launch team is being polled for a "go" or "no go" to proceed with the count.
8:57 p.m. local (11:57 p.m. EDT)
All systems are reported "go" to continue with the countdown for liftoff at 9:03:30 p.m.
8:57 p.m. local (11:57 p.m. EDT)
The launch director and the mission director each have given their approval to press onward with the countdown.
8:58:30 p.m. local (11:58:30 p.m. EDT)
Countdown clocks will resume in one minute.
8:59:30 p.m. local (11:59:30 p.m. EDT)
T-minus 4 minutes and counting. Clocks have resumed for the final minutes of tonight's countdown to launch the Atlas 5 rocket carrying a clandestine payload for the National Reconnaissance Office. Liftoff is set to occur at 9:03:30 p.m. local.
8:59:40 p.m. local (11:59:40 p.m. EDT)
T-minus 3 minutes, 50 seconds. The ground pyrotechnics have been enabled.
9:00:30 p.m. local (12:00:30 a.m. EDT)
T-minus 3 minutes. The Atlas first stage liquid oxygen replenishment is being secured so the tank can be pressurized for launch.
9:01:00 p.m. local (12:01:00 a.m. EDT)
T-minus 2 minutes, 30 seconds. The first stage RP-1 kerosene fuel tank and the liquid oxygen have stepped up to proper flight pressure levels.
9:01:30 p.m. local (12:01:30 a.m. EDT)
T-minus 2 minutes. The Atlas first stage and Centaur upper stage are now switching from ground power to internal batteries.
9:01:35 p.m. local (12:01:35 a.m. EDT)
T-minus 1 minute, 55 seconds. The launch sequencer has been commanded to start.
9:01:40 p.m. local (12:01:40 a.m. EDT)
T-minus 1 minute, 50 seconds. Liquid oxygen and liquid hydrogen propellant topping to the Centaur upper stage is being secured.
9:02:00 p.m. local (12:02:00 a.m. EDT)
T-minus 90 seconds. The safety system has been armed.
9:02:30 p.m. local (12:02:30 a.m. EDT)
T-minus 1 minute. Now 60 seconds from launch at America's western spaceport.
9:02:50 p.m. local (12:02:50 a.m. EDT)
T-minus 40 seconds. Centaur's liquid oxygen and liquid hydrogen tanks are stable at flight pressures.
9:03:10 p.m. local (12:03:10 a.m. EDT)
T-minus 20 seconds. "Go Atlas" and "Go Centaur" was just called by launch team during a final status check.
9:03:30 p.m. local (12:03:30 a.m. EDT)
LIFTOFF! Liftoff of the Atlas 5 rocket on the NROL-41 mission, launching a new reconnaissance satellite to oversee and protect the nation.
9:03:45 p.m. local (12:03:45 a.m. EDT)
T+plus 15 seconds. And the vehicle has cleared the tower at Space Launch Complex 3.
9:04:00 p.m. local (12:04:00 a.m. EDT)
T+plus 30 seconds. The RD-180 main engine is burning bright as the Atlas majestically rises into the evening sky.
9:04:30 p.m. local (12:04:30 a.m. EDT)
T+plus 60 seconds. One minute into the ascent.
9:04:50 p.m. local (12:04:50 a.m. EDT)
T+plus 80 seconds. The post-liftoff roll maneuver is complete, putting the rocket in the correct orientation for the flight downrange.
9:04:55 p.m. local (12:04:55 a.m. EDT)
T+plus 85 seconds. Mach 1 as the main engine fires at full throttle.
9:05:30 p.m. local (12:05:30 a.m. EDT)
T+plus 2 minutes. Atlas is looking good as the engine eases back to 95 percent throttle.
9:06:00 p.m. local (12:06:00 a.m. EDT)
T+plus 2 minutes, 30 seconds. The rocket now weighs half of what it did at liftoff.
9:06:30 p.m. local (12:06:30 a.m. EDT)
T+plus 3 minutes. RD-180 is performing well as the rocket climbs away from the planet on its south-southwesterly trajectory.
9:07:15 p.m. local (12:07:15 a.m. EDT)
T+plus 3 minutes, 45 seconds. The two-halves of the Atlas 5 rocket nose cone encapsulating the spacecraft have separated. Also jettisoned was the Forward Load Reactor, a two-piece deck that rings the Centaur stage to support the bulbous fairing during launch.
9:08 p.m. local (12:08 a.m. EDT)
The Atlas 5 has flown into a scheduled news blackout with jettison of the rocket's payload shroud. The veil of secrecy surrounding the launch of this classified satellite means no further information about the progress of the ascent nor release of the payload will be announced in real-time.
Launches are most likely broadcast online, though spaceflight.now and vandenberg.af.mil may not make the effort to link to them. Do a Google search for the name of the launch and "watch live", and look for the most recent (news) results. Newspapers such as the LA Times may forward the live video feed.
I hope you found this post useful! Please share your thoughts in the comments below.
]]>This trial may be null, due to measurement error.
The body composition measurement method I used, DXA, turns out to be one of the most accurate we have, but DXA is still quite imprecise. In January 2016, I measured myself on two consecutive days at the same time of the day, and saw a loss of lean body mass of 4lbs.
"From Geek to Freak" is rapid muscle gaining program proposed by 4-Hour Workweek author Tim Ferriss, in his newer book The 4-Hour Body, pages 181-224. This is my account of following the a simplified version of the program ("Occam's Protocol") for three weeks. I presented a talk on this topic, comparing Occam's Protocol with P90X, at the 2011 Quantified Self Conference. Slides from the talk are available at Slideshare - P90x vs. Occam's Protocol as described by Tim Ferriss in 4-Hour Body. While anecdotal evidence (my girlfriend at the time) suggests the program worked, there were no good measurement supporting that.
Tim Ferriss comes from a family of lightly muscled men. Four DNA tests with 3 different companies (2 with 23andme) confirmed that he's "not genetically pre-programmed to gain a lot of muscular mass". The chapter is an update of his 2005 routine that he posted at Bodybuilding.com.
The information below is from the book, which fills in some details missing from Bodybuilding.com. It's also rearranged in the order that Tim recommends a new trainee should go through, as opposed to the chronological order in the book:
You can buy The 4-Hour Body on Amazon. Some people have asked whether I may infringe copyright by quoting so much. I believe Tim made available most of the info in his blog already, I give full credit to him, I'm releasing my own contributions under a CC license, and others are reproducing way more without adding their own experience. However, if there is a problem, please contact me.
Bodybuilders on the boybuilding.com forums are generally of the opinion that gaining 34lbs of muscle in a month is nearly impossible, unless one is at an artificially low weight, and has exceptional genetics. The commonly-cited example of Casey Viator had both these traits; plus, Casey was paid for each pound of muscle he gained.
For Occam's Protocol (the "simplified" version of From Geek to Freak), Ferriss claims at page 195 of 4HB:
"In just over four weeks, Neil [Strauss], who'd never been able to gain weight, gained 10 pounds of muscle and grew from 125 to 135 pounds, a near 10% increase in total body mass"-- The 4-Hour Body, p. 195
Note that Neil's grow means no fat gain! If you read the Diet section below, this claim will appear pretty fantastic.
Goal (Occam's Protocol I, p. 196):
to apply the Minimum Effective Dose necessary to trigger muscular growth mechanisms, and then channel food preferentially into muscle tissue during overfeeding, as safely as possible.
Get a body composition scale. After you have the scale, get a DXA (formerly DEXA) imaging appointment to determine your body composition. Centers in the San Francisco Bay Area:
Immediately after undergoing the DXA scan, measure your body composition on the scale, and note its offsets.
On the other hand, note that such scales use the bioelectrical impedance analysis method, which is sensitive to the amount of water you've been drinking between measurements. Tim mentions being able to "make my bodyfat percentage jump almost 1% in five minutes by drinking two liters of water in between measurements". I've also seen, for a total weight gain of 5lbs morning vs. evening, an increase in body fat of 3% and a drop of muscle mass of 2% at the end of the day, after eating several times and drinking 2 cups of milk and 1.5L of tea.
Tim recommends the following protocol for largely avoiding the hydration issue:
Immediately upon waking, drink 1.5 liters (about 50 fluid ounces) of cold water - ensure that water temperature is the same day to day - and wait 30 minutes.Urinate and then test bodyfat using bio-impedance. Do not eat or drink anything else before testing.
Even though Occam's Protocol "works without any supplementation whatsoever" (p. 208), Tim recommends the following supplements for the daily regimen:
Creatine is awesome, get it.
"More than four hours per month of gym time is not necessary to reach your target weight in record time. Flip the growth switch and go home." (p. 190) With your newfound time, focus on eating.
Record all settings on your machines (e.g. hole number in the sliding seat adjustment) and standardize the movement. Control all variables that should not change between exercises (form, seat adjustment, rest time etc.)
Use the "locked position" to protect your shoulders in all weight-bearing exercises: pull your shoulder blades back and push them down towards the hips 1-2 inches. If you are lying down on your back and someone pulls your arm up, then your whole body should follow instead of just the arm and a (dislocated) shoulder.
One-Set-To-Failure: Follow Arthur Jones' general recommendations for one-set-to-failure (80-120 seconds of total time under tension per exercise set), for 7 or more reps (the leg press is to be performed at 10 or more repetitions at the same cadence). Do not just drop the weight when you hit failure. Hold it at the limit for 5 seconds. Then slowly lower it for 5-10 seconds. "Do not underestimate the severity of complete failure. [Failure is pushing as if] you had a gun to your head." The last rep is the one that matters. If you feel you could do another set a minute later, you didn't reach failure. "Contrary to widespread belief, this is not the point at which the individual thinks they cannot complete any more repetitions, but rather the first repetition that fails due to inadequate muscular strength." -- http://en.wikipedia.org/wiki/Strength_training#Progressive_overload
5/5 Cadence: "Perform every repetition with a 5/5 cadence (5 seconds up, 5 seconds down) to eliminate momentum and ensure constant load." The only exceptions to the cadence rule are the abdominal exercises and the kettlebell swing.
Do not pause at the top or bottom of the movements.
Between exercises, "[t]ime 3 minutes exactly with a stopwatch." (p. 203). This means that if you work out with a partner, you must very carefully alternate exercises (so that they do their workout during your rest time of 3 minutes and vice-versa), or you just do both exercises, then they do both their exercises. Don't let the 3 minutes blend into 3 and a half. "This is nonnegotiable."
If you complete the minimal target number of reps for all exercises (except abs and kettlebell swing), increase the weight the next workout 10lbs or 10%, whichever is greater. If that feels too easy after 2-3 reps, stop, wait 5 minutes, then increase 5-10 more lbs.
If you fail before 7 reps (or 10 for the leg presses), do not decrease the weight and do another set. Just leave, take one day off, then com back 48 hours after your failure. (p. 217)
Increase recovery time along with size. "The bigger and stronger you get, the less often you will go to the gym" because your body needs more time to repair a 20lb muscle vs. its 10lb predecessor. (p. 204)
There are two workouts (A and B) that you will alternate. Each workout consists of two primary lifts, which can be done using either machines, or free weights. I chose the machines because they minimize the number of variables I have to control for (posture, grip etc.) and drastically reduce the risk of injury.
Do only one set of each exercise - to failure; then go home. You don't need to spend more than 7 minutes per day in the gym - really.
The temptation to add exercises will be enormous. Don't do it. If anything, if you've never been able to gain mass, you might choose to do less.
On breathing, from Greyskull LP:
Perform sets of 5 reps in each exercise with 1 minute of rest in between. Cadence: fast and controlled on the rising, 2-3 seconds on the lowering. Do not perform more than 5 reps per set. If you can lift more, wait 1 minute, increase the weight 10lbs or 10% (whichever is less), and retry. Repeat until you complete fewer than 5 steps.
After you fail to finish 5 reps, calculate 70% of your last full 5-rep set (except for the shoulder press - use 60%) and round up or down to match an existing weight. Take 3 minutes rest and perform a 5/5 cadence set-to-failure with that weight.
Take 5 minutes of rest, and repeat for the second workout.
This schedule assumes that you consume enough food to support rapid growth. The vast majority of those who fail to gain, do so because of insufficient eating (as you can also see from the comments that the bottom of this page - in my first trial I ate way too little).
The generally-accepted basic idea for muscle gain, is that you need to eat A LOT. You'll gain both fat and muscle, and you'll have to shed the fat later; gaining just muscle is very hard.
The meal composition is nearly identical to the Slow-Carb Diet, as are the tenets, though we now add a starch such as brown rice or quinoa to the non-shake meals. The choice is yours: eat big or eat often. Fat gain will be slightly more with the former, and inconvenience will be much greater with the latter. Pick one and make it your religion for four weeks. It's easy to lose a little extra fat later.
There are lots of websites and smartphone apps that let you track food intake. The main problem with them is that the nutrition data either lacks for your foods, or is submitted by users, who often get it wrong.
I followed a low-tech approach this time and used an Excel spreadhseet with lots of foods from Trader Joe's.
More information about what tools people use to track their diet is on the Quantified Self Forum.
Ensure that you are eating 20 calories per pound of lean bodyweight for 10 pounds more than your current lean bodyweight. Note that this is not necessarily your ultimate target weight (assuming you want to gain more than 10 pounds). Adjust this target number on a weekly basis.
Example: 120lb lean mass + 10lb = 130lb target lean mass. Times 20 => eat 2600 calories.
Generally, if you just eat a lot, including milk and shakes, "You don't need to count calories" (p. 217).
Healthy high-calorie items:
From Geek to Freak: "Eat enormous quantities of protein (much like my current fat-loss diet) with low-glycemic index carbohydrates like quinoa, but drop calories by 50% one day per week to prevent protein uptake down-regulation."
It's not true that the body can only handle max. 30 grams of protein per meal. Daily total protein is more important than per-meal protein.
For muscular gain, Tim suggests at least 1.25g of protein per pound of current lean bodyweight. Example: for 120lb lean body mass, eat 150g of protein per day. (p. 191)
[NB: this study suggests eating 25g of protein immediately after your workout, and John Berardi suggests ingesting a workout drink containing protein and carbohydrate ("Drinking nothing during training is a mistake of colossal proportions")].
Example: 160lbs => ~2 liters
WARNING: Three weeks into my Occam's Protocol experiment, I had an abdominal pain attack and had to visit the ER (for the second time in my life; I don't just go to the hospital for anything). The diagnosis was not certain (a type of gastritis), but my BUN and protein levels were above normal. You MUST drink way more water than usual when taking proteins. Track it carefully and don't just rely on drinking when thirsty or "often enough".
To avoid kidney problems associated with extra protein intake, and poor performance due to dehydration, drink extra water. Guidelines vary, but Anthony Ricciuto recommends as many ounces as your body weight in kilograms. In less idiotic measurement units, drink 2.8% of your body weight. He also recommends increasing fiber intake: "It's hard to pack on size if you have a severe case of constipation. You may laugh, but this is one of the first things that happen to someone trying to gain weight. Many individuals increase their caloric and protein intake yet; they forget to do the same with their fiber and water."
The Wikipedia page on Strength training confirms the necessity of extra water:
Nonetheless, the deamination process creates urea, which places low, but consistent, strain on the nephrons. Failure to properly hydrate can result in an exaggeration of this effect. [24] [25]
The book chapter doesn't give any specific guidelines for how much carbs you should eat.
Some sources say 1.5 - 3g per pound of body weight per day; others: 5-6g per kg of body weight (which is about the same).
From http://en.wikipedia.org/wiki/Strength_training#Nutrition:
An adequate supply of carbohydrates (5-7g per kg) is also needed as a source of energy and for the body to restore glycogen levels in muscles.
150lbs x 3g = 450g carbs / day.
This is more than DOUBLE what I ate in my 2011 trial. The minimum would be 225g carbs/day, again above what I ate every single day. No wonder I didn't gain much.
So far (Nov 2013), this is my most challenging diet component. Some easy ways to up your carb intake:
If you fail to gain mass (at least 2.5lbs per week), add 2% organic milk between meals. Start with one liter a day. You can reach up to one gallon a day. Tim advises that even if you think you are lactose intolerant, start drinking a little organic whole milk, then gradually increase the quantity. You'll find that in a few days you'll be able to drink a cup of milk without problems.
See also this debated study: Drinking milk helps gain muscle and lose fat after exercise. It was done in 2007 on men (AJCN link), and apparently repeated in 2010 on women:
We conclude that chronic postexercise consumption of milk promotes greater hypertrophy during the early stages of resistance training in novice weightlifters when compared with isoenergetic soy or carbohydrate consumption.
Mix macaroni (preferably durum whole wheat) with a can of water-packed tuna and as much fat-free turkey/bean chili as you like, then microwave it for 1 minute on high for breakfast. Substitute quinoa for the macaroni for more protein. Add some whole milk or Irish butter for taste.
Cost varies with your weight and supplement stack. I haven't tallied it up yet, but I'd wager between $300 and $400 per month, given food prices in the San Francisco Bay Area. I shop mostly at Trader Joe's.
You need to eat anyway, and you should do the workout for one month and then apparently take a break or start a cutting cycle (this is a bit unclear in the book). So consider about $200 extra for gaining muscle like you haven't gained before.
More sleep lets the body recover better. 8+ hours per night are recommended.
Informal studies suggest that workouts done in the evening lead to ~10% bigger muscle gains.
I followed the exercise and diet guidelines in Occam's protocol for only 3 weeks, up to the point of getting admitted to ER, when my blood protein level was too high. After that, I continued training, but I drastically dropped the amount of protein intake, basically not following the diet.
The compliance map to the right shows how well I managed to adhere to Occam's Protocol. I was focused on protein intake, and eating so many calories was difficult, so my total caloric intake was 84% of what was recommended (2500 calories a day, with one day per week at 50% calories).
I didn't know about recommended carb intake (because the Occam's Protocol chapter in the book doesn't mention it! I only found out about that later from other sources), so my carbs were whatever came with 150g of protein per day. Overall, I had 70% of the carbs I should have had (avg. 162g/day, out of recommended 230g).
Sleep is said to be a major factor in recovery, and I averaged a clearly low amount, 6.6 hours per night. I'm not sure what the recommended amount is, but let's say 8 hours.
Compliance was, then:
For maximum precision, I took before and after DXA scans with the same machine (at Premiere Scan, see above), and about at the same time of the day (3pm). Here are the results:
Before | After 3 weeks | + / - | |
Body fat % | 21.8% | 22.6% | +0.8% (+2.2 lbs) |
Lean mass | 115.7 lbs | 117.7 lbs | +2 lbs |
Total weight | 153.4 lbs | 157.6 lbs | +4.2 lbs |
In 19 days of doing Occam's Protocol, I gained 2lbs of muscle and 2 lbs of fat. By comparison, Neil Strauss (see the Claims section) allegedly would have gained 6.8lbs of muscle and no fat.
What would I do differently if I did this again?
Still, I would not expect anything near the fantastic gains of Tim Ferriss or Neil Strauss.
So, does Occam's Protocol work? In my experience, with 84% compliance, I got only 29% of the advertised muscle gain, plus 2.2lbs of "bonus" fat.
WORK IN PROGRESS - I haven't done this yet, so information is incomplete
See Tim's log on bodybuilding.com, and/or buy the 4-Hour Body book.
(updated from Bodybuilding.com) Focus on 2-10 exercises per workout. The sequence Tim used is at http://www.fourhourbody.com/geek-to-freak/. "Take at least least 3 minutes of rest between exercises." (p. 186).
]]>After being raised and indoctrinated as a Christian Orthodox, I became an atheist. The process wasn't easy, but it started with two things:
This one is funny. I was probably 20 and I started writing professionally in English (back then - ~2000) that using a spell checked made sense. To my surprise, it turned out I had been misspelling words such as "Octomber" and "ustensil" for years without being aware of it. I honestly thought those were the correct spelling, because the words originated from Latin, as did my mother tongue (Romanian), and in my native language October was "OctoMbrie" and utensil was "uStensil".
What else could I have been wrong about for years?
I had a debate with a friend as to whether it was okay to get drunk. I said it was not and pointed to a Bible verse supporting my belief. He said it was, and pointed out to Proverbs 31:6-7
Give strong drink unto him that is ready to perish, and wine unto those that be of heavy hearts.
Let him drink, and forget his poverty, and remember his misery no more.
There's more: "wine that maketh glad the heart of man", "wine, which cheereth God and man"
The Internet was starting to spread in Romania at that time, and thanks to access to information outside the church, I found SkepticsAnnotatedBible.com, which highlights contradictions (and absurdities, and cruelty, and misogyny, and a lot of stuff preachers don't preach about) in the Bible.
From there on, the Bible crumbled like a house of cards, followed by the Orthodox dogma, and ultimately belief in a deity.
Here are some essays challenging religion that I've written over the years.
You hear it so often: "You must respect my religion!". But why exactly does religion deserve respect??
How to debate religious believers (with a chance to shake their beliefs) - I'm really proud of this one, 7 years later
WTF? 2009-Jun-16: UK couple sues building with automatic light sensors because as electrical devices their use is forbidden on Sabbath (...more?)
Over 100 000 scientists worldwide reject evolution? - this is the most laughable misuse of statistics I've ever seen
Darrel Ray - The God Virus: How Religion Infects Our Lives and Cultures
Find one phrase which would convince believers in God to stop believing
Dan Dascalescu is a serial entrepreneur and software engineer based in Silicon Valley. He has co-founded Blueseed (the visa-free startup ship for entrepreneurs), two web startups (in EdTech and FinTech), and the Quantified Self Forum (the largest online community for self-trackers). Dan has worked at Google, Yahoo! and other companies. He is a supporter of Bitcoin (decentralized currencies), seasteading (exploring the possibilities of ocean-based micro-nations), transhumanism (enhancing the human condition with the use of technology) and open source software.
Currently, Dan works as a Developer Advocate and Partner Engineer at Google.
A software developer by training, Dan co-founded iDoRecall, an innovative learning app, and built its MVP using the Meteor JavaScript platform. Earlier, he built StockBase (a financial news aggregator for value investors), worked in front-end engineering at Google, led localization efforts at Yahoo! and managed Yahoo!'s internal wiki, contributed to a number of open source projects, worked in satellite communications in Belgium, and co-authored and translated several books on computer networks and software development.
In 2011, Dan co-founded Blueseed, the first attempt at a startup community at sea. Blueseed would convert a cruise ship into a live/work/play space designed to encourage innovation and creativity (nicknamed by the press "the Googleplex of the Sea"), and would station it 12 nautical miles from the coast of Silicon Valley, in international waters outside the jurisdiction of the United States. Foreign entrepreneurs would be able to legally work on the ship without the need for a US work visa, and to travel to the mainland via ferry using easy-to-obtain business/tourist visas. Dan is also an ambassador for seasteading, the movement working to enable ocean communities - floating cities - which will allow the next generation of pioneers to peacefully test new ideas for government. The most successful can then inspire change in governments around the world. Another seasteading venture Dan is advising is Oceanus, an initiative to recycle the plastic form the Pacific gyre into floating platforms that can be assembled into habitable seasteads.
Prior to Blueseed, Dan founded the Quantified Self Forum, a community for those passionate about self-tracking and related technologies, and spoke at the QS2011 and QS2013 conferences.
Dan studied Computer Science in Romania and scored 2nd place nationwide at the Olympiad in Informatics. He has also taken classes in nanotechnology and molecular biology in Silicon Valley, where he has been living since fall 2004. He is passionate about emergent technologies, critical thinking, transhumanism, psychology, and business development.
Dan was featured in numerous articles in the Romanian, American and international press and was named #1 Romanian entrepreneur to watch in 2013 by WallStreet.ro. He has spoken at MIT, Stanford, on BBC Radio, and at many startup events.
Dan's most recent talk was on Blueseed and Bitcoin, the crypto-currency that enables instant and worldwide peer-to-peer transactions, with low or zero processing fees, and without a central issuing bank.
Entrepreneurship, behavioral economics, social psychology, transhumanism, life extension, critical thinking, self-improvement and the Quantified Self movement, emerging technologies (nano-bio-info-cogno), public speaking, improv, philosophy (ethics, atheism), open source, digital rights, knowledge management, film, literature (mostly non-fiction), Toastmasters, web development, market research, humor, writing, debate, thought experiments, fitness, rock climbing, photography, tourism. Occasionally: camping, hiking, swimming, skiing, rafting, sky diving, ziplining, spelunking and bubble soccer.
I've been told that I have a special talent, but I think I'm just cursed: every single time I try some new software, within the first hours (or even minutes) of using it, I find a bug.
Below is a list of the bugs I've reported over the years, for my own reference to check for fixes. Some links are to patches I submitted.
I mostly stopped updating this page in 2011, as it became pointless at the rate at which I was finding bugs. You can see some of my activity since then on GitHub.
Metric | Meteor | Derby | Wakanda | Mean.io | Mean.js |
StackOverflow questions | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
GitHub stars | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
GitHub commits | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
GitHub forks | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
Twitter followers | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
Tweets about homepage URL | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
Homepage URL shares on Facebook | |||||
... shares on LinkedIn | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
... shares on Google+ | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
Dan Dascalescu, May 2016
What technology stack should you use to build a new web application? Python + JavaScript? Ruby on Rails + JavaScript? PHP + ... And so on - the choice was never easy. Until now.
But the MEAN stack still has many moving parts, is far more difficult to learn and use than Meteor, and offers a lot less out of the box. (Read more: Meteor vs. the MEAN stack?).
What are we left with for the server-side then? Actually, why not look at an integrated, client-server, full-stack solution?
There are three such full-stack JavaScript frameworks in existence that I know of: Derby, Wakanda, and Meteor. The one with the largest momentum is, indubitably, Meteor.
Meteor is an open-source, production-ready, real-time full-stack web application framework built on top of proven technology, that allows for very rapid prototyping and produces cross-platform code. Meteor apps run on the web, on Android and iOS, can be called from the command line, and work in any JavaScript host environment, such as Adobe extensions or the Internet of Things. Rather than being minimalistic, Meteor offers a lot out of the box, while working with other technologies in the ecosystem. A Tinder-like application has been built from scratch with Meteor in 6 weeks, several startups built with Meteor have already been acquired, the number of companies using Meteor is growing, and more and more companies are hiring developers familiar with Meteor.
Meteor is very well funded, and their Galaxy cloud app hosting platform is revenue-generating. The Meteor Development Group has received $31.2M in funding so far from the prestigious venture capital firm Andressen Horowitz, who has also invested in Twitter, Airbnb, and Foursquare. Founded in 2011, Meteor was a startup incubated by YCombinator, the most successful startup incubator. Meteor founders and early employees include former Googlers, early employees at Asana, and the creator of Etherpad.
Investing in Meteor is indisputably worth it, given the framework's developer base and momentum:
By contrast, the next most popular full-stack JavaScript framework, Derby.js, has 1/10th the footprint on StackOverflow, GitHub and Quora. Another worthwhile contender, AngularJS (albeit for the front-end only), is being radically revamped in the upcoming 2.0 version, and "users will need to get to grips with a new kind of architecture. It's also been confirmed that there will be no migration path from Angular 1.X to 2.0". Moreover, the consensus seems to be that Angular 2 won't really be ready for use until a year or two from now. Anyway, since v1.2, Meteor has official support for Angular.
Meteor is what we should have built in 1994 at Netscape
— Marc Andreessen, co-founder Netscape, Ning, Andreessen Horowitz
Meteor's community has been growing rapidly since launch in December 2011 and the Hacker News announcement in April 2012.
Metric | Meteor | Derby | Wakanda | Mean.io | Mean.js |
StackOverflow questions | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
GitHub stars | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
GitHub commits | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
GitHub forks | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
Twitter followers | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
Tweets about homepage URL | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
Homepage URL shares on Facebook | |||||
... shares on LinkedIn | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
... shares on Google+ | Calculating... | Calculating... | Calculating... | Calculating... | Calculating... |
Meteor was announced on Hacker News in April 2012 and web application developers stormed to it. Why? Watch the first 90 seconds of this video:
Two things to note here. First, the DOM is updating immediately, all by itself. I changed the data, and the template updates. There's no callbacks, no bindings, and no controllers. It just works.
Second, somehow, I'm using the Mongo API on the client. You've never seen this before. Up until this point in history, database APIs only worked on the server. But in Meteor, there isn't a server API and a client API. There's just the Meteor platform API. And it works everywhere.
The key is at 1:28: "Meteor is a client-server-database framework, written entirely in JavaScript. It takes care of almost all of the plumbing for you, allowing you to concentrate on developing business value.
Meteor works with your existing front-end library (e.g. Famo.us), and its own front-end library Blaze is perfectly integrated in the framework and fulfills the same purpose as Angular, Backbone, Ember, React, Polymer, or Knockout, but is much easier to use (and can be used with any of these libraries if you have to). Blaze is also faster than Angular in high-throughput rendering tests.
Meteor works with your existing back-end via REST APIs if needed, but you're better off using DDP, a simple and powerful publish/subscribe protocol. The server side runs on top of Node.js but eliminates callback hell by using Fibers. The underlying database is MongoDB and Meteor includes real-time and highly efficient monitoring for changes to data via oplog tailing.
While AngularJS is a front-end library and Sails.js is a backend one, Meteor is a full-stack framework, comparable with Derby.js, yet with much more momentum.
By comparison, Angular is far more popular than it is effective (largely the result of having Google's name being behind it), and its learning curve borders on the atrocious. As one developer who evaluated AngularJS has put it,
Angular is... band-aids over self-inflicted wounds
The Meteor community has created an amazingly handy application debugging tool that will automatically detect your collections and display your client-side documents, let you modify them, and control subscriptions - Mongol.
Besides that, Meteor has server-side debugging support, and the popular IDE WebStorm has released full support for Meteor, including debugging. Chrome DevTools is also an excellent client-side JavaScript debugger.
Meteor supports MongoDB natively and future database support is coming, with the acquisition of FathomDB and MySQL support on the roadmap. Redis.io support is in beta. 3rd party packages provide support for MySQL, and PostgreSQL.
The pub/sub architecture makes changes in one client propagate seamlessly to all subscribed clients, without having to write any special code.
MongoDB does have its problems and there are community efforts to improve the support for other databases, or investigate new ones such as HyperDex, a faster and ACID-compliant alternative to MongoDB.
Meteor supports three view engines: React, Angular, and its own Blaze.
Just like with Backbone, Meteor doesn't depend on stuffing application logic into your HTML. There's no embedded JavaScript, template logic, or binding hookup code in data-
or ng-
attributes, and no need to invent your own HTML tags.
Better yet, Meteor's declarative templates, Handlebars-like templating system and one-way data binding free you from having to bind your view's render function to the model's "change" event, as you had to with Backbone.
Jade is supported for templating as well.
Thanks to its logic-less templates and automatic website reload on code and CSS changes, Meteor is very easy to use by web designers as well - they don't need any knowledge of the code or custom HTML directives.
When it comes to building custom components, you don't need to automatically use React (in fact, React itself may be a bad idea). You can use the built-in block helpers or one of the several community packages for building reusable UI components:
iron:router was the de facto routing package for Meteor. A powerful solution, it supports client or server-side routes, multiple views with yields, subscription management, plugins, hooks, route controller inheritance etc. In 2015, FlowRouter has gained more and more support in the community, and may become the new leading routing package.
Angular's default routing solution is clearly inferior to that of Ember.js and supports only one view. Thus ui-router was born four years after the release of Angular, and for DOM state preservation, the ui-router-extras addon is required.
Meteor has built-in security against many common concerns, and lists framework-independent aspects to watch for.
Meteor security design principles include code vs. data and client vs. server separation, stateful connections that must be deliberately authenticated, and allow/deny rules for database access.
All user input is HTML-escaped when being displayed back to the client, thanks to the Handlebars-like {{...}} templates - a first defense against XSS. Furthermore, Content Security Policy support is provided by the browser-policy-*
core packages. Browser-policy offers a very easy-to-use but powerful mechanism to prevent a large variety of attacks with only a few lines of code. Lastly, Meteor security guidelines advise on how to foil the remaining attack types (sanitize user-entered URLs and CSS).
MongoDB is by its nature more resistant against database injections than SQL because it doesn't parse inputs, but there are still things to watch out for. One example is passing expressions where strings were expected:
// user_supplied_id is "{$ne: 'nonexistentstring'}"
id: user_supplied_id
This returns all users, when the programmer expected one particular id to be passed. Meteor defends against this in multiple ways:
package includes pattern checking functions useful for checking the types and structure of variables and an extensible library of patterns to specify which types you are expecting.check
coverage for all arguments to methods and publish functions.By using browser storage instead of hijackable session cookies, CSRF attacks are impossible.
Meteor uses the best crypto to store hashed passwords - bcrypt.
Meteor provides fine-grained control over method calls and database access -- see Discover Meteor - Setting the Security Record Straight.
For the paranoid, a full-database encryption layer that runs on top of Meteor exists, called Mylar. It stores only encrypted data on the server, and decrypts data only in users' browsers.
There are still securities issues you should be aware of but those apply to any web framework. Meteor takes care automatically of the most common concerns.
There's no need for Grunt, Gulp or Bower. Meteor includes SASS/LESS compilation, CoffeeScript to JavaScript conversion, and CSS/JS concatenation and minification. All these happen automatically and transparently when you meteor run
your application, and when you change your code.
Hot code push means users are seamlessly upgraded when the HTML, CSS or JavaScript changes. Your server app isn't restarted if all that changes is client code. If only CSS changes, only the CSS is reloaded in the client. Also, there is no need to submit updates via the app store. Form fields aren't preserved when the page reloads on the client, but I filed a feature request for that.
Even if you don't use hot code push for your deployed app, it can vastly improve your development experience. When developing for mobile, having immediate updates in your simulator as you change code shortens your code-execute-test loop.
Deployment tools include:
Meteor comes with built-in unit and integration testing.
Mobile apps can be generated from the same codebase, using PhoneGap/Cordova. An app built with Meteor + Cordova + Famo.us has real-time data capabilities and can access native APIs, while being cross-platform, self-updating, and native-feeling. Deploying a simple chat app to iOS takes about an hour, assuming you have an Apple Developer account enrolled in the iOS Program ($99/year) - a limitation from Apple. On Android, no registration is necessary to run an app on a connected Android device.
Meteor mobile apps benefit from hot code push as well as web apps, enabling the developer to publish to the market (App Store/Play Store) only once. Subsequent updates will be pushed by the Meteor server to the app's LocalStorage (hot code push), and the app will also reload itself (hot code reload). As long as the app performs essentially the same function, hot updates are permitted by Apple's App Store policies. This enables continuous deployment on mobile without resubmitting to the App Store review process (which can otherwise be painfully slow) and without requiring users to download updates. Supporting new device capabilities still requires updating the app through the app store because access to new native components will be necessary.
In addition to out-of-the-box support for mobile development, Meteor can also be used to develop IoT apps. Thingstud.io is a a real-time user interface platform to the Internet of Things, built with Meteor.
Atmosphere, Meteor's package repository, holds over 10,000 packages. Starting with version 1.3, released in March 2016, Meteor can use npm packages out of the box. This is huge - the Node.js ecosystem is the largest among all programming languages, with more than 250,000 packaged modules.
This makes Meteor a much richer framework than Backbone, which expressly states that, "You can read and understand the source of in an afternoon."
Case in point - while a login system with support for OAuth via Facebook, Twitter or GitHub requires several hundreds of lines of code with Angular, in Meteor all you have to do is add one core package and specify where to place the login button. That's one command and one line of template code. Password reset is included. Even with the most popular token login package, OAuth is far from simple with Angular.
Meteor could be even more open if it allowed using 3rd party packages directly, perhaps by using npm as its package manager (or at least Bower for the client). But there are good reasons why Meteor created a new package system: essentially, "isomorphic JavaScript" - the ability to use the same API on the client as on the server. This ranges from the HTTP package (HTTP/get
works everywhere, and you don't need to switch from the request module to jQuery's ajax()
call) to Minimongo, which makes it possible to use the same MongoDB queries on the client that you use on the server. An even more powerful consequence is that Meteor's build system ("Isobuild") can target mobile apps too. This is what enables generating mobile apps from the same codebase:
With Isobuild and Cordova, you'll be able to add a camera package to your app and use one simple
API to take a photo, and then type one command to build your app not just for the browser, but for the iOS and Android app stores too.
Scalability is by far the most under-explored area of Meteor. Which is a good thing - it means that other areas are well understood and battle-tested.
"Does Meteor scale" is an often-asked question, and the short answer is yes. The more nuanced answer is as follows:
Meteor's business model (on the basis of which Meteor Development Group has raised $31.2M in venture capital from Andreessen-Horowitz and others) is providing enterprise-grade hosting for Meteor apps - a solution called Galaxy. Galaxy was released on October 5, 2015, and it is expected that it will scale very well. Below are several reasons why this is likely.
Meteor is built on top of Node.js and MongoDB. Node is notoriously scalable - 1 million concurrent connections laughs at C10K and in raw terms, Node is faster than PHP. PayPal rewrote with Node.js their account overview page, one of the most trafficked apps on the website and formerly written in Java. The result: double the requests per second, 35% decrease in the average response time, and built almost twice as fast thanks to engineers being able to work full-stack in JavaScript. IBM wrote a white paper on highly scalable Node.js apps. Node is used at Yahoo!, eBay, Dow Jones, Microsoft, Uber, LinkedIn and other large companies.
MongoDB is also highly scalable - used to store petabytes of data and perform billions of operations daily at eBay, FIFA, Adobe, Craigslist, McAffee, Foursquare and others.
Meteor is most often used for new ("greenfield") projects. These typically have users in the hundreds, thousands or tens of thousands. By the time your new web app will reach a million users, you'll have resources to scale, and Meteor will have been optimized even further. For example, in December 2013, Meteor 0.7.0 introduced oplog tailing, a MongoDB driver which watches queries much more efficiently, without requerying the database on each update. Subscriptions that before took seconds to return data, now take under 30ms. Then in February 2015, MongoDB launched version 3.0, which brings 7-10x better write performance and an 80% reduction in storage by using compression. Meteor support landed in March 2015, along with a 10x Meteor speedup for write operations applicable to any version of Mongo.
Meteor itself doesn't scale well when processing high-velocity data (over 100 writes per second). Horizontal scaling doesn't help, but moving the high-velocity data into a separate database instance avoids high CPU utilization that Meteor would otherwise cause.
There are powerful tools that help instrument and scale Meteor apps:
Bottom line - Meteor is still relatively new, and there aren't any Facebook-scale web apps built with it yet. The largest known Meteor deployment is ClassCraft, which handles 6400 concurrent users per server.
Unless you're rewriting a project with a very large user base, you can get started with Meteor and scalability won't be a problem down the line. Worrying about it now is like worrying now about reducing your tax rate when you're going to be a billionaire.
Meteor is best suited for Single-Page Apps, and less suited:
If you want to build a website, not a web application. Meteor ships all template, CSS and JavaScript code to the client, which means it may take a few seconds for the first page to be rendered. For example, an individual Meteor blog post takes 5+ seconds until DOMContentLoaded and 9+ seconds to complete rendering, on a 3Mbps connection, and about 10 seconds to load on a 4G LTE mobile connection. By contract, StackOverflow.com loads in less than 2 seconds. For a web application, the initial loading time isn't that important (think Gmail). There are also ways to speed up serving the first page, and optimizing the initial page load is on the roadmap for the core as well. docs.meteor.com doesn't have subscriptions on the landing page, and thus loads in 4 seconds. For website SEO, also have in mind server-side rendering and spiderable.
When you already have a backend you don't want to rewrite in JavaScript, and all you need is a client library for the front-end. In that case a UI library like Webix would be sufficient.
When all you want is to build a web-service / REST API, without a client. In that case, a Sails.js or Hapi might be sufficient, while Meteor could be overkill.
When core MySQL support is needed. MySQL support is on the roadmap, and there are 3rd-party packages that integrate MySQL reactively with Meteor to some extent. For reactive PostgreSQL support, there is numtel:pg.
When you need to squeeze every last bit of performance from your app.
For graphics-heavy mobile games, it may be better to build a native app (though Famo.us enables native-like mobile apps with physics and animation).
For applications with very large numbers of concurrent connections, Meteor might require larger amounts of RAM than other solutions. See the Scalability heading above.
In other words, if you need Facebook-scale now, Meteor is not the best solution. But by the time you need Facebook scale, your app will probably be rewritten a few times, and you'll be able to throw money at the problem. Developer time and rapid iterations are much more valuable until that stage.
If you want to build your app using a WYSIWYG GUI designer/architect tool like Wakanda's, the Sencha Architect or the Servoy Developer RAD tool. Meteor does have Meteor kitchen, which is progressing rapidly, but it hasn't reached the level of maturity of vertically-integrated business applications solutions designed for ISVs. See though the Meteor-Webix integration and look into integrating with Sencha's ExtJS, the comprehensive and battle-tested widget library.
If your company lawyers are insanely strict about never using AGPL-licensed software such as MongoDB. However, read this post on why 10gen, the makers of MongoDB, won't pursue legal action (unless you fork MongoDB and resell storage as a service), and are even happy to provide a permission slip for your company.
A native widget library. This is by design - unlike monolithic frameworks (Wakanda, Servoy etc.), Meteor offers all the plumbing and lets you use any UI components library works best for your project. Meteor "just works" with many client libraries (Bootstrap, Famo.us etc.) suitable for general web application design and UX. Meteor also works with Webix UI, a fast, nicely designed, mobile-friendly set of advanced UI components (tree, table, treetable, tab view etc.) that are great for developing admin and ERP applications, thanks to the meteor-webix integration which I put together with huge help from Maksim Kozhukh, the lead Webix developer.
Native support for developing Progressive Web Apps. The PWA architecture combines the best of web and mobile apps, but Meteor doesn't support Service Worker, or HTTP/2 + Server Push. Supporting these technologies would solve the slow first page load problem typical of Meteor apps, and would make lazy loading easy.
Native reactive "joins" for MongoDB (which doesn't have joins). There are, however, community packages for this.
A native mechanism to load templates dynamically. The feature is on the roadmap as "incremental loading". In the meantime, have a look at numtel:publicsources and numtel:privatesources, which let you create bundles for lazy loading resources, with or without authentication.
Blaze lacks two-way data binding as in Angular. This is by design. The Flux team at Facebook criticized how two-way data binding creates a major challenge for scaling applications because views can trigger changes in data, and data changes can trigger cascading changes in views, which makes it very difficult to predict the behavior of the app as a whole. The solution is to use an MVVM pattern, such as the viewmodel package. Of course, you can also use Angular with Meteor.
Native server-side rendering (useful for SEO). There is however a server-side rendering package developed by Meteor guru Arunoda Susiripala, and native server-side rendering support is also on the roadmap.
Full Windows support. Meteor for Windows has just received a shiny installer and its hot code build performance is as good as on Linux. The only major feature that doesn't work just yet is mobile development. Some packages (e.g. fourseven:scss) may also not install on Windows due to including architecture specific binaries, but that has been addressed with MDG making available Windows build machines. Now packages maintainers need to release new versions including Windows builds.
Easy explicit control over file load ordering. Currently, Meteor loads all .js
and .css
files essentially in alphabetic order (with some refinements), and if you don't want to rename files, you must add them into packages (which is actually a good way to organize your code). Packages create a load order via their dependency chain, and within the same package, you can also explicitly specify the load order via addFiles
Package API calls. Still, an explicit load order mechanism is on the roadmap.
One blessed or recommended package for a given 3rd party library you find in its package repository, Atmosphere. The Atmosphere is in need of cleanup, given that there are often several more-or-less-maintained wrappers for some third party libraries. The good news is that starting with version 1.3, Meteor supports npm packages natively, and Meteor wrappers for 3rd party packages will become obsolete.
Only full-stack (client+server) frameworks are directly compatible with Meteor. It's mistaken to compare Meteor to AngularJS or Sails, because Meteor provides both the server and client part of the web app equation, while Angular/Backbone/Ember/React are client libraries, and Sails/Express/Hapi are server frameworks.
Many think that the MEAN stack is a comparable alternative to Meteor.js. In actuality, the MEAN stack is just a group of technologies used together. It offers far less than Meteor, and you have to do all the wiring between Mongo, Express, Node and Angular yourself. Read more at Meteor vs. the MEAN stack?.
Derby - real-time framework for building collaborative web apps, with templating and server-side rendering support. Derby's data manipulation layer ("Racer") is built on top of ShareJS, an operational transformation library enabling concurrent editing of documents with eventual consistency between multiple users. "Racer provides a consistent API for managing data on the server and client, and seemlessly [sic] syncs the two with little thought from the user." Only supports MongoDB and Redis.
Wakanda - open-source web application framework for developing web and mobile applications in JavaScript. It includes a database server (WakandaDB), a JavaScript framework (WAF), and Wakanda Studio, an integrated development environment. Here's a 3-minute video of what Wakanda can do.
Loopback - an open source Node.js framework built on top of Express optimized for building APIs for mobile, web, and other devices. Connect to multiple data sources, write business logic in Node.js, glue on top of your existing services and data, connect using JS, iOS & Android SDKs. There's also a Client SDK for Android, iOS and the browser (using Angular). Loopback's Juggler component can connect to MySQL, Oracle and Postgres and addition to MongoDB.
Sails - front-end agnostic real-time MVC framework for Node.js built on top of Express. Has an ORM that "provides a simple data access layer that just works, no matter what database you're using", "easy WebSocket Support" (wraps socket.io) and can auto-generate REST APIs.
Hapi - framework for building applications and services. Low-level API for handling HTTP requests. No database interface.
React - view library that can work with an MVC framework. Developed by Facebook essentially as a marketing device to hire engineers from Google. Meteor supports React as a view engine. There are also community-developed Meteor-React integrations available.
AngularJS - client framework developed at Google and due for a massive rewrite. Supported officially by Meteor.
Backbone - minimalistic client library providing models, views and collections. Can connect to a backend over REST.
Ember - MVC client-side framework
I hope you found this writeup informative in guiding your decision on a single-page application framework. Please leave any questions in the comments.
And by the way, if you're looking for a Meteor engineer, I'm available for consulting/mentoring - http://meteor.engineer.
]]>(while spending less than 10 minutes a day on it)
I'm a knowledge worker, and cooking isn't part of my core business; it's more akin to one of those "maintenance" activities, like brushing my teeth or cleaning my place - necessary but not particularly awesome. While I like cooking with someone else, or dining with people (or hey, being cooked for), I also don't find it particularly interesting to cook for myself; I'd rather do something more fun or interesting instead. Still, I need to eat, and I want to eat healthy food.
Since I started living alone, I gradually discovered a way to eat healthily while eventually spending less than 10 effective minutes a day on this task. Today I found that other information professionals were spending almost two hours a day for eating, so I decided to write this article.
I've been doing this for 5 years, including living one year gluten-free, a few months being a vegetarian, and 3 months doing P90X, which also requires a very strict regimen. I had a physical examination in December 2009, and all my blood test results were normal. I look like this.
I've even entertained guests who complimented the food, without knowing it came from a pre-packaged healthy meal. (This "blinding" is essential, because most people have a preconceived idea that microwaveable foods are crap, while in reality they wouldn't be able to distinguish Trader Joe's mushroom risotto from a home-made one).
Taste-wise, this style of non-cooking is surprisingly good. When I eat dinner at gatherings where the host laboriously cooks a meal designed to impress, I rarely find that meal to be way tastier than what I can assemble at home in 5 minutes.
There are many myths about food. Here are some well-researched and referenced facts.
Microwave ovens are perfectly safe. In fact, for most cooking, microwave ovens are healthier than conventional ovens, because they preserve more nutrients.1 The FDA states that,
Microwave cooking does not reduce the nutritional value of foods any more than conventional cooking. In fact, foods cooked in a microwave oven may keep more of their vitamins and minerals, because microwave ovens can cook more quickly and without adding water.
Just don't microwave olive oil for too long, and avoid microwave-unsafe materials.
Many processed foods are just as nutritious or in some cases even more nutritious than fresh foods, depending on the manner in which they are processed. Read more about this at the Australian Food and Grocery Council's article Food Myths (based on a 2001 study):
In particular, frozen fruit and vegetables are as nutritious, or even more nutritious than "fresh" produce. Unless you buy the produce from the farmer's market the day you eat it, it's going to have spend days (or weeks) in transit, then some more time in the supermarket aisles. During this time, nutrients have been lost, and by the time you prepare them, they're far from peak ripeness. By contrast, frozen produce has been picked up at its peak ripeness, and immediately flash-frozen, locking in the nutrients.2
Processed foods typically contain normal levels of fat and salt. Just make sure to read the nutrition label, and shop from a healthy food store such as Trader Joe's or Whole Foods, or from a healthy brand (e.g. Healthy Choice).
"Processing can also make some nutrients more available. For example, processing tomatoes into either paste or sauce increases the concentration of lycopene-an antioxidant Harvard University researchers have found may reduce the risk of prostate cancer by up to 40 per cent."
It doesn't matter at what time of the day you eat. Night time meals won't make you fat.
If you're trying not to gain weight, the protein/fat/carb composition of diets followed for weight loss is largely irrelevant. All that matters is the calorie count and attendance of group sessions.
Consumption of red meat does significantly increase mortality, but protein consumption is okay if you're under 65, so stick with chicken, turkey and seafood.
Dietary cholesterol does not correlate with an increased risk of cardiovascular disease.
Here's how to do it - what you need, and how to proceed.
A stove, a convection oven and a toaster help, but you can do just fine with only a microwave oven. Use paper plates (made of recycled paper) to avoid having to wash dishes. When possible, reuse a plate. To save time, do something else while the microwave works (duh) and eat at the computer (not so obvious) while you read the news or whatever. Wash utensils immediately after eating, to avoid the formation of crust. Add ketchup or barbecue sauce to improve the taste of bland meals.
Food-wise, you want to aim for things that preserve well for a long time, because grocery store trips take time (at least one hour to fill up for 2 weeks). Fortunately, most foods can be preserved in some fashion (frozen, canned etc.) for a month or more, and the exceptions (e.g. bananas, grapes) still last for about a week.
Trader Joe's and Whole Foods sell good, healthy food. Trader Joe's has less variety, but much cheaper prices. Safeway can also have healthy items.
These foods will last for months, but may need to be refrigerated after opening.
...and for which longer lasting alternatives aren't available or satisfactory:
I haven't experimented with, and somewhat miss, cucumber and salads. Please feel free to chip in with your knowledge.
Imagine you had to spend one hour each day to take care of eating. Now you don't have to. And there's quite a lot you can do with one hour (mirror).
"In studies at Cornell University, scientists looked at the effects of cooking on water-soluble vitamins in vegetables and found that spinach retained nearly all its folate when cooked in a microwave, but lost about 77 percent when cooked on a stove. They also found that bacon cooked by microwave has significantly lower levels of cancer-causing nitrosamines than conventionally cooked bacon. [...] When it comes to vegetables, adding water can greatly accelerate the loss of nutrients. One study published in The Journal of the Science of Food and Agriculture in 2003 found that broccoli cooked by microwave - and immersed in water - loses about 74 percent to 97 percent of its antioxidants. When steamed or cooked without water, the broccoli retained most of its nutrients." -- The Claim: Microwave Ovens Kill Nutrients in Food, New York Times 2006 ↩
wiseGEEK - Are Frozen Vegetables Less Nutritious Than Fresh?,
EatingWell - Q. Fresh vs. Frozen Vegetables: Are we giving up nutrition for convenience? ↩
This is an easy-to-understand summary of Prof. Daniel Solove's critique of the "nothing to hide" argument (mirror, 2007 blog post, SSRN paper), which is so often brought up in discussions about privacy and civil rights. I've added a few ideas from "I have nothing to hide" - or the Sainsbury's Lesson, a 2006 article in The Register.
Prof. Solove's article starts like this:
When the government gathers or analyzes personal information, many people say they're not worried. "I've got nothing to hide," they declare. "Only if you're doing something wrong should you worry, and then you don't deserve to keep it private."
This view, however, is mistaken. The "nothing to hide argument" can and should be debunked.
In its most extreme version, the "nothing to hide" argument can be countered with:
"In its less extreme form, the nothing-to-hide argument refers not to all personal information but only to the type of data the government is likely to collect". Privacy is not about hiding bad things. Surveillance can inhibit lawful activities like free speech, free association, and other First Amendment rights essential for democracy.
Here are some of the problems with this type of data collection, be it be government or corporations, and even if you think you have nothing to hide:
Proponents of the "nothing to hide" argument claim that in order to have real resonance, privacy problems must cause serious damage, be it physical or financial, not just feelings of unease. The problem with this is that privacy isn't lost in one dramatic event, the equivalent of an oil spill. Instead, it's eroded slowly, over time, like gradual pollution. Gradual pollution often causes worse problems than an isolated accident.
When the government starts monitoring the phone numbers people call, many may shrug their shoulders and say, "Ah, it's just numbers, that's all." Then the government might start monitoring some phone calls. "It's just a few phone calls, nothing more." The government might install more video cameras in public places. "So what? Some more cameras watching in a few more places. No big deal." The increase in cameras might lead to a more elaborate network of video surveillance. Satellite surveillance might be added to help track people's movements. The government might start analyzing people's bank records. "It's just my deposits and some of the bills I pay-no problem." The government may then start combing through credit-card records, then expand to Internet-service providers' records, health records, employment records, and more. Each step may seem incremental, but after a while, the government will be watching and knowing everything about us.
"My life's an open book," people might say. "I've got nothing to hide." But now the government has large dossiers of everyone's activities, interests, reading habits, finances, and health. What if the government leaks the information to the public? What if the government mistakenly determines that based on your pattern of activities, you're likely to engage in a criminal act? What if it denies you the right to fly? What if the government thinks your financial transactions look odd-even if you've done nothing wrong-and freezes your accounts? What if the government doesn't protect your information with adequate security, and an identity thief obtains it and uses it to defraud you? Even if you have nothing to hide, the government can cause you a lot of harm.
"But the government doesn't want to hurt me," some might argue. In many cases, that's true, but the government can also harm people inadvertently, due to errors or carelessness.
The point is you have no idea:
After the notorious NSA mass surveillance leak in June 2013, the argument was made that the U.S. government was collecting only metadata, and there was nothing to worry about. Whether that's true or not, metadata can be extremely powerful, and more than sufficient to identifiy individuals, even if anonymized. Here are some examples:
Worse, metadata is also subject to distortion: you can be called by the NRA or some insavory organization by mistake, or you can call a service in order to help someone else.
]]>Arguing that you don't care about the right to privacy because you have nothing to hide is no different than saying you don't care about free speech because you have nothing to say. It's deeply anti-social. Right are not individual; they are collective. What doesn't matter to you today, may matter to an entire population, or a way of life, tomorrow.
-- Edward Snowden, 2015
Summary by Dan Dascalescu, 2011-May-23. Reviewed 2016-Apr-05.
This summary is ~3250 words long. Est. reading time: 10-15 minutes.
Official book website: Outliers
Book word count: ~75,000.
Sumary compression ratio: 23x.
Claimed summary coverage ratio: 95%.
In the 1950s, before the advent of cholesterol-lowering drugs and aggressive measures to prevent heart disease, the town of Roseto, PA, had a markedly lower incidence of heart disease than neighboring towns despite the similarly unhealthy lifestyle led by their inhabitants of Italian origin (obesity, smoking, diet with 41% calories coming from fat, and including lard and sweets). Exercise was not a typical pastime. Genetics was also ruled out when relatives of Rosetans who lived in other parts of the US were shown to be in no better health than the average American.
The cause of Rosetans' health and longevity could only be attributed to close family ties, dictated by their cultural background: "the Rosetans had created a powerful, protective social structure capable of insulating them from the pressure of the modern world".
The study 1950s studies were conducted by Stewart Wolf and John Bruhn. The book doesn't mention it, but by the '70s, Roseto lost its effect, along with increased Americanization.
For whoever has will be given more, and they will have an abundance. Whoever does not have, even what they have will be taken from them.
-- Matthew 25:29
Most of the top Canadian hockey players are born in January and February. Extremely few are born in October-December. The explanation is that in Canada, the "eligibility cutoff for age-class hockey" is January 1, so kids who were born in January have an advantage of almost a year to kids who were born in October-December. At ages as young as 6, this difference is very visible in physical maturity and other sports skills. These kids get further special training, while the others don't, so by the time they're in high school, December kids have no chance against January kids at hockey. They also don't get a chance to accumulate 10,000 hours of practice (see next chapter).
Here is the breakdown of any elite group of hockey players, by Canadian psychologist Roger Barnsley:
If Canadians pick their top hockey kids based on what they think is skill, they are misled. They simply pick the oldest kids, and then train them a whole lot, and they do end up being the best hockey players. This is a beautiful example of a self-fulfilling prophecy.
The phenomenon has been observed in Belgium soccer, where the cutoff date was August 1st, and most of the top kids were born in August and September. A few years after the cutoff date was moved to January 1st, most of the top kids were, predictably, born in January or February.
Sports such as basketball don't suffer from a cutoff date effect, because a player of any age can always find other players and basketball courts. Hockey rings, on the other hand, are much more difficult to get into.
The Trends in International Mathematics and Science Study (TIMSS) shows that among fourth graders, the oldest children scored between 4 and 12 percentile points better than the youngest children. Economist Elizabeth Duhey calls this effect "huge": a score in the 80th percentile can qualify a kid for a gifted program, while a score in the 68th percentile would not.
Parents believe that disadvantages faced by younger children in kindergarten will eventually go away. But they don't. "At four-year colleges in the US, students belonging to the relatively youngest group in their class are underrepresented by about 11.6%."
[T]he outliers in a particular group [reach] their lofty status through a combination of ability, opportunity, and utterly arbitrary advantage.
A study done in the early 1990s by psychologist K. Anders Ericsson at Berlin's elite Academy of Music on the school's violinists showed that:
Once a musician has enough ability to get into a top music school, the [distinguishing thing] is how hard he or she works. That's it. And what's more, the people at the very top don't just work harder or even much harder than everyone else. They work much, much harder.
Bill Gates and Sun co-founder Bill Joy were hard working young adults, but they also were very lucky:
By the time they reached their 20s, both had amassed 10,000 hours of computer programming experience.
Similarly, The Beatles had performed live 1,200 times by the time they had their first success in 1964. By comparison, most bands today don't perform live 1,200 times in their entire career.
What about young prodigies? Gladwell gives the example of Mozart. While he started writing music at six, his early works were not oustanding, and were all probably written by his father. Mozart composed his first completely original concerto regarded now as a materwork (No. 9, K. 271), at 21.
Ten thousand hours is an enormous amount of time. It's all but impossible to reach that amount all by yourself by the time you're a young adult. You have to have parents who encourage and support you. You can't be poor, because if you have to hold a part-time job [...], there won't be time in the day to practice enough.
Data from the world's top 75 wealthiest figures as of 2008 shows a surprising characteristic: worldwide, and history-wide (from the Egypt pharaohs to today), almost 20% of the richest figures come from a single generation in a single country: Americans born between 1831 and 1840: Rockefeller, Carnegie, J. P. Morgan. They were worn right on time to catch the emergence of Wall Street and the continental sprawl of railroads, which led to immense commerce opportunities.
For computing, the key year is 1975. Steve Jobs, Eric Schmidt, Bill Joy and the three other founders of Sun Microsystems were born in 1954 or 1955.
IQ does play a role in success in life, but only to a point (an IQ of 120). Beyond that, what makes the difference is the family and community environment, and hard work. Lewis Terman, a professor of psychology at Stanford University has tracked about 1450 Californian kids with high IQs since 1921, and until 1955, before he died. The study, called Genetic_Studies_of_Genius is still going on. However, sociologist Pitirim Sorokin showed that their performance was indistinguishable from that of kids taken at random, from families of similar backgrounds. Terman's fieldworkers also rejected two students who were to become Nobel laureates because their IQs were too low. Terman himself concluded:
At any rate, we have seen that intellect and achievement are far from perfectly correlated.
In the end, only one thing mattered: family background. Almost none of the genius children from the lowest socio-economic class became famous.
The last 25 American to receive Nobel prizes in Medicine or Chemistry came from prestigious, but also from not-so-prestigious colleges (DePauw, Holy Cross, Gettysburg College). Malcolm concludes that to win a Nobel Prize, you have to be smart enough to get into a college as good as Notre Dame. "That's all."
At the University of Michigan law school, under an affirmative action program, each year 10% of the students who enroll must be members of racial minorities. To do that, the university lowers the admission criteria (otherwise, only 3% of its students would come from racial minority groups). White students indeed get better grades, which is not surprising, given that they had higher undergraduate grades than the minority group for which the admission standards had to be lowered. What is surprising, however, is that a followup study by Richard Lempert (PDF) showed that after graduation, the minority students "were doing every bit as well" as the white students:
[...] although an admissions index that combines LSAT scores and undergraduate grade-point average is a significant predictor of law school grades, it does not predict career success on any of our three outcome measures: log of current income, self-reported satisfaction, or an index of service contributions.
How many uses can you think of for the following two objects:
A student with an IQ of 180 might say for brick: "building things", "throwing"; and would stop there. A creative student with a lower IQ might say "drawing on the sidewalk", and for blanket, "dampening it in water to help a thirsty person in the desert". Which of them is more suited for the kind of imaginative work that a Nobel Prize requires?
Geniuses such as Christopher Langan fail to realize their potentials (Langan, IQ 195, ended up working on a horse farm in rural Missouri) due to lack of "practical intelligence: knowing what to say to whom, knowing when to say it, and knowing how to say it for maximum effect".
Sociologist Annette Lareau concluded that there are only two parenting philosophies, and they divided very well along class lines: wealthier parents adopted a style called "concerted cultivation" (the kids are encouraged to attend a variety of activities, and parents are permanently involved in their lives), while poorer parents essentially let kids develop on their own. The result is that "cultivated" kids develop a sense of entitlement and shift interactions to suit their preferences. Kids left to their own devices appear better behaved, less whiny, but develop a sense of distance, distrust and constraint.
Most successful lawyers in New York share these characteristics:
Several mountainous towns in Kentucky exhibited an unusual pattern of family feuds that lasted for several generations. This is explained by the origin of the townspeople: Scotch-Irish herders, who brought with them a culture of honor. As a farmer, one's existence depends on collaboration with others. As a herder, it's much more independent. The herder needs to defend his animals and land, to the point of killing another herder's animals who venture on his land. A study on University of Michigan students revealed that those who were most affected by an insult uttered towards them ("asshole") differed from those less affected in simply their origin: Southern US. This was despite a number of factors: all students were several generations removed from their farming or herding ancestors (if they had any British ancestors at all), they were all fairly cosmopolitan and had traveled significantly, they were of varied size and physical strength etc.
Industrial and airplane accidents are almost always caused by a number of small defects occurring at the same time. For example, the famous Three-Mile Island incident happened because "five completely unrelated events occurred in sequence". If any of those malfunctions occurred independently, or even two at a time, the plant would have kept functioning without a glitch. For aircraft, it typically takes 7 malfunctions to cause a crash. Since planes have numerous warning and redundancy systems, the key element in causing crashes is human error, and more precisely, the communication between pilots.
Commercial airliners have a captain, and a pilot, and sometimes a flight engineer in the cockpit. If the captain becomes too tired, sick, or otherwise incapacitated, it becomes the job of the other pilot to take over the aircraft. The problem is that in some cultures, the "power distance index" is so high, that the captain is perceived as a demigod who is never wrong. This prevents co-pilots from clearly warning the captain of dangers he missed, and had been the cause of most of the Korean Air crashes until 1999, when Korean Air[lines] (the name was changed after 1997) decided to take measures specifically aimed at addressing the power distance issue. In Korean, there are six forms of address: formal deference, informal deference, blunt, familiar, intimate and plain. It's also the job of the listener to figure out what the speaker is trying to say, in complete contrast to the Western "transmitter orientation" - the speaker being responsible for communicating their ideas clearly and unambiguously.
To allow pilots to escape their cultural legacy, Korean Air mandated the use of English in the cockpit. The foreign language let pilots have different personas while flying, allowed them to communicate clearly with their superiors, and be assertive when the latter were in the wrong. This reduced the number of Korean Air incidents dramatically, and the airline's record has been spotless since 1999.
Similarly, Cuban pilots considered American Air Traffic Controllers their superiors, and were simply afraid to let them know of critical details about the plane, such as being out of fuel. A Cuban pilot responding to a New York ATC who directs their plane to circle JFK and report on status, might say: "We're circling around the airport, we're good, and uh, we're running out of fuel". (Planes are "running out of fuel" naturally as they approach their destination, and this is not the terminology a pilot would use). This type of speech, in which the speaker attempts to downplay what's being said, is called "mitigated speech". An American pilot would say "Listen buddy, my fuel is almost zero. I have to land.".
In English, the numbering system is quite irregular:
In Chinese, on the other hand, the system is perfectly regular. After 10, the numbers are expressed as "one-ten-one", "one-ten-two", ..., "ten-nine", "two-ten-one", "two-ten-two", ... "three-ten-seven" etc. Try this exercise: compute thirty-seven plus twenty-two. If you are an English speaker, your brain has to decode that into "three tens and seven" plus "two tens and two". For a Chinese speaker, the information is right there in the question: "three-ten seven plus two-ten two". By the age of five, this keeps American kids a year behind Chinese kids in counting. It also makes math easier to learn, and conceivably more attractive.
Another factor that explains Asians' prowess with math is their culture of work. As rice paddy owners, a Chinese family has to work year-round, and on a very small surface (2 or 3 paddies, each the size of a hotel room). The work is also very complex, involving irrigation at a precise water level, and simultaneous harvesting and planting of the new crop. Wheat or corn, on the other hand, require much simpler work, with almost no work to do between harvest and sowing, and relatively little work to do between sowing and harvest. As a side note, peasant life, even well into the 19th century, consisted of brief episodes of work, followed by long periods of idleness. Moreover, mechanized agriculture makes it possible for an average Midwestern American farm today (450 acres) to be used by just one family, while in China the same area of land feeds a village of 1,500 people.
This culture of work can also be gleaned from folk wisdom: Chinese proverbs sound like "If a man works hard, the land will not be lazy", or "He who wakes up before dawn 360 days a year will never fail to make his family rich". By contrast, Russian proverbs from areas where agriculture consists of growing wheat, sound like "If God does not bring it, the earth will not give it".
Applied to schoolwork, the problem of mastering mathematics, for example, is not one of ability, but one of aptitude:
You master mathematics if you are willing to try. Success is a function of persistence and doggedness.
The Trends in International Mathematics and Science Study (TIMSS) exam shows a striking correlation between the math rankings and the rankings of how many items are answered in a tedious 120-item questionnaire about students' background (parents' level of education, their opinion of math etc.) "They are exactly the same." In other words, countries students whose students take the time to answer the questionnaire, are the same countries whose students do the best job at solving math problems: Singapore, South Korea, China (Taiwan), Hong Kong and Japan. Interestingly, the lowest-achieving Chinese Americans come from the edges of the Pearl River Delta, where agriculture is less intense.
The culture of work influences Asians' education in a simple but very effective way: their school year is longer than the American school year by as much as 35%: the school year in the US is, on average, 180 days long. In South Korea, it's 220 days long. In Japan, its 243 days long. Asian countries don't have a long summer vacation. No doubt Asian children do better in university once they immigrate to the US - they simply have had much more time to gain an education.
An analysis of the reading skills of American kids shows that from the beginning of the school year until the end, these skills predictably increase. Also predictably, kids from higher-income family do better than kids from lower-income family. What is surprising is that during the summer vacation, the reading skill of higher-income kids also increases, while that of lower and middle-income kids remains constant, or decreases slightly. Explanation: lower-income kids spend their vacation playing or watching TV, while higher-income kids go to summer camp, are taken to museums, or their parents otherwise provide them with educational experiences and opportunities.
Gladwell concludes that "School works, it's just that there's not enough of it for kids who aren't achieving".
In the South Bronx, randomly chosen children from very poor families enroll in KIPP (Knowledge is Power Program) charter schools. By the end of the 8th grade, 84% of them perform as well at math as privileged children from high-income suburban American families. By comparison, in the South Bronx, only about 16% of middle school students are performing at or above their grade level in math.
These kids don't need a very high IQ, shiny laptops, smaller class size (KIPP class size is 35), or teachers with a PhD. They need a chance, and to do hard work: most wake up at 6am, because school starts at 7:25. They study until 5pm, then do homework for a few hours in the evening as well. Saturdays, school goes from 9am to 1pm, and from 8am to 2pm in the summer.
The problem with math education is the "sink-or-swim approach". By contrast, more time spent on math means understanding is more solid, teachers have time to explain things, and retention is better. KIPP's solution is to provide 50% to 60% more learning time.
]]>Outliers are those who have been given opportunities - and who have had the strength and presence of mind to seize them.
Dual-energy X-ray absorptiometry (DXA, formerly DEXA) is regarded as the gold standard for determining body fat percentage and lean mass. Several studies tout its excellent accuracy (1, 2, 3).
The cost for DXA has gone down to only ~$45 in California as of 2016, thanks to mobile truck services like Body-Spec. But how accurate is DXA? A number of different studies suggest DXA is not as reliably as commonly believed (1, 2, 3, 4):
This study shows that present interunit variability allows comparisons among laboratories, but only if highly standardized analysis procedures are used. [...] [B]oth at group and individual levels DXA did not present an expected accuracy in tracking changes in adiposity in elite male judo athletes.
Our results suggest that, even when using the same device, the between-centre variability remains a matter of concern, particularly where body composition is concerned. [...] High-quality operator performance is, however, a prerequisite for proper QA in any setting.
So how accurate is DXA in a truck setting, with operators who likely aren't trained to the level of a permanent lab?
In January 2016, I spent $90 (donations are welcome below) to test Body Spec on two consecutive days, and determine DXA variability. I tried to keep everything as constant as possible: truck, time of day, food, what I was wearing:
Date | Truck | Time of day | Wearing | Food / Hydration |
2016-01-13 | Parked at Google | 10:48 am | Shorts, t-shirt, socks | Overnight fast |
2016-01-14 | -- same truck -- | 12:24 pm | -- same -- | Overnight fast; might have had more water |
I also tried to keep the day of the week constant, but that didn't quite work out. On a more serious note, I could't get an appointment for exactly the same time of day, so there was a ~90-minute difference. Still, I was fasting on both days. Hydration might have varied by a cup of water.
The DXA machine used was a GE Healthcare Prodigy. The operators were different - I got the usual girl the first day, and the Body-Spec founder the next. As you can see from how well they ensured my body was centered on the table, there was a difference in operator performance:
To my surprise, the scan showed that I had lost 1.8lbs of lean tissue (0.8kg) overnight!
This really undermines the trust I'm going to place in DXA measurements.
Before going in for the second test, I suspected that the machine's software could notice that I had two DXA scans one day after another, and compensate (aka fake data) for that. But they don't seem to do that, given how bad the difference is. Also, due to some technical glitch, I was scanned as a new patient the second time, then the operator moved the scan into my profile. I actually have a separate printout for the "orphan" scan.
Let's say this is the margin of error of DXA - ~2 lbs of fluctuation in lean mass overnight. If you look at the oldest two measurements in the chart, you'll see 117.3 lbs of lean mass on 4/16/2015 and 121.5 on 6/23/2015. A nice gain of four pounds of muscle after training for two months on the StrongLifts 5x5 program!
O not. This gain might actually be zero, if each measurement was within the margin of error, and at opposite ends. In other words, my 4/16 real value could've been 119.3 and the 6/23 one 119.5, so no progress. Working hard for two months without progress would upset me. I'm a beginner bodybuilder doing SL5x5, so muscle gain should happen.
The Body-Spec scan report breaks down body composition per region: arms, legs, trunk, abdominal region. What changed from one day to the next?
Date | Arms | Legs | Trunk | Android (abdominal) | Gynoid (hips, buttocks) | Total |
Jan 13 | 4 | 12.9 | 17.6 | 2.6 | 6.6 | 36.7 |
Jan 14 | 4 | 12.2 | 18.4 | 2.6 | 6.7 | 37.0 |
The fat percentage was essentially the same (0.2 - 0.3lbs of variation out of 37lbs is less than 1%). Now let's look at lean tissue.
Date | Arms | Legs | Trunk | Android | Gynoid | Total |
Jan 13 | 14.2 | 37.6 | 58.1 | 8.6 | 19.7 | 117.9 |
Jan 14 | 14.2 | 35.8 (-4.8%) | 57.4 | 7.8 (-9.3%) | 18.9 (-4.1%) | 116.1 (-1.5%) |
A few things to notice:
The best indicator of how well a fitness program works in the end is the mirror, but that can take months. I was hoping that DXA scans could reveal signs of progress (or lack thereof) faster, so I didn't have to waste time on programs that potentially didn't do much. I was also hoping that precise data could be used to compare results, but a loss of almost 2lbs of lean mass overnight blows any gains away. Beginner body builders can hope to gain two pounds in a month, and those who've been training for several years see much finer changes. From BodyBuilding.com:
Provided that they follow a sensible, structured diet and training program, a 150-pound beginner fitness enthusiast in Aragon's model can potentially gain 18-27 pounds of lean muscle per year.
Assuming this machine wasn't defective somehow, if you want to quantify muscle gain, DXA might be worth doing 4+ months apart - for an error rate of 25%, provided you train hard. But by then, the mirror will show results already. More often than that, DXA is probably a waste of money.
]]>InsideTracker? is a personalized blood test panel for up to 30 biomarkers, aimed at optimizing health and performance (mood, energy, sleep, metabolism). I reviewed? the service in April 2014.
P90X? is a 90-day exercise/training/workout/weight loss/get ripped/bodybuilding/fitness programs for both men and women. It seems to be one of the few program advertised in magazines and via infomercials that actually works, according to a large following of users who have gone through the program and blogged or video-blogged their results.
I have completed P90X on 2009-Jan-16 and wrote an extensive P90X FAQ?.
The Occam Protocol is a precursor to the Geek to Freak protocol for massive muscle gains. I followed the Occam Protocol for 19 days and for the first time in my life, gained significant amounts of muscle.
Tim Ferriss claimed that he lost 20lbs of fat in 30 days without doing any exercise. Let's see how that works for an individual without Tim's genes.
Can a three-day fast reboot your immune system?? That is the title of a Forbes article reviewing the research on the health benefits of fasting for two or more days. My article shares how I did it with minimal suffering.
Dual-energy X-ray absorptiometry (DXA, formerly DEXA) is regarded as a gold standard for determining body fat percentage and lean mass. Its cost has gone down to only ~$45 in California as of 2016. But how precise and reliable is DXA? really?
Padding can be used on dumbbell handles, pull-up or chin-up bars, or curl bars, to protect the hands from calluses and to thicken the bar for a better grip.
See my recommendations on Heart rate monitors?.
A research assistant at the University of Alabama at Birmingham recommended the Contec CMS50FW as "a seemingly great unit in terms of features, cost, and availability".
See my old buyer's guide on Amazon and the ~2011-2014 pulse oximeters discussion on the Quantified Self Forum.
If you're trying to save money, your best bets are Craigslist and garage sales.
Abs belts? are based on electrical muscle stimulation, which is approved by the FDA as a muscle toning method (but not as a way to lose weight).
I don't run ( Tabata intervals are more efficient for cardio), but for martial arts training and general use, the original Salomon Techamphibian shoes? are unbeatable thanks to their extremely breathable design and convertibility to sandals.
That is the title of a Forbes article by contributor Steven Salzberg. It summarizes a study on autophagy (the body's mechanism of degradation and recycling of cellular components), with focus on the immune system:
USC's Valter Longo, who studies aging and longevity [...] described remarkable metabolic changes that occurred as a result of prolonged fasting. They found that fasting for 3 days or longer -- drinking only water and eating less than 200 calories per day -- can truly "reset" some components of your immune system.
They found that fasting lowered white blood cell (leukocytes) counts, which in turn triggered the immune system to start producing new leukocytes, a key component of your body's immune system.
The research looked at both mice and humans. The results indicate that a 3-day fast (but not a 1-day fast) was beneficial for cancer patients pre-chemotherapy.
That is promising. Let's see what it can do for a healthy individual such as myself (mid-30's, caucasian male). Would it reduce the inflammation in my nasal mucosa? (I wake up with one nostril congested every morning.) Will it improve my skin condition?
I was also aware of caloric restriction as an anti-aging mechanism in general, so fasting was an idea I'm comfortable with.
Fasting has the potential to delay aging and help prevent and treat diseases while minimizing the side effects caused by chronic dietary interventions.
Incidentally, on March 24 at 2pm I was scheduled for a blood draw for an InsideTracker test?, so I decided to continue the fast.
I wasn't eating that much to begin with; probably under 1500 calories per day. Nevertheless, dropping down to 200 calories should be scary, right? Well, not really. Guess how many calories are in the meal below.
That is 140 grams of diced carrots (super convenient to prepare in the microwave if you're short on time; they come in a self-venting bag) and a can of Chunk White Albacore Tuna (in water, no salt added, 5oz). A grand total of 60 + 100 calories (I didn't count the lime slices). I've just had this meal and it's pretty filling. Note that this is a double serving of both carrots and fish, so you could get by with just 80 calories per meal and split them across the day.
For dinner, I had a serving of ceviche - no preparation, delicious taste, and only 45 calories.
Other nice snacks that taste good:
But the most general way to find filling and nutritious foods is at NutritionData.Self.com:
The bottom line:
TL;DR - lost 3 lbs, marked increase in strength (pushups count went from 25 to 35), no change in nasal congestion or skin condition, slight cognitive enhancement.
Day 1 was the easiest - didn't feel that hungry, and not much changed.
I ate 205 calories - a stuffed pesto mushroom, and a serving of ceviche.
2pm: blood draw at LabCorp. Fasting since midnight.
Body composition at the end of the day: 156.9lbs, 22.9% body fat, 38.1% lean muscle.
Day 2 was more difficult - I felt more hungry, and noticed some minor decrease in attention. I can't attribute this to the fasting though - I had noticed worse attention on other days, and the culprit was most likely too little sleep, which happened on day 2 as well.
I ate 185 calories - two servings of ceviche (90 calories), about 60 calories worth of raspberries, and a cheese wedge (35 calories).
Indeed, it took more than 48 hours to see positive results.
At 60 hours in, my military pushups count jumped from 25 the previous day, to 30. It felt significantly easier to do the pushups, and I could have done more, but I wanted to keep good form.
I ate 200 calories: 160 for lunch (the carrots and tuna pictured above), then a little less than a serving of ceviche for dinner, and 10 raspberries before bed.
Another jump in the military pushups count to failure: 35! This is close to my personal record of 37, which I had attained after sustained training. No such training this time.
12:30pm: blood draw at QuestDiagnostics
Body composition after the blood draw (12 vials) and one CLIF Bar (which should cancel each other out): 154.0lbs, 22.1% body fat, 38.6% lean muscle.
This indicates a loss of 3lbs of body mass. The body composition was determined using an Omron HBF-516B full-sensing bioelectrical impedance analysis scale, so the changes in fat and lean muscle percentage can't be considered significant.
Thanks to InsideTracker? CSO Gil Blander, who sponsored the tests, we have "before" and "after" biomarkers. InsideTracker happened to change labs (LabCorp to QuestDiagnostics) exactly in the middle of my test, but I was reassured that the measurements are very similar, since LabCorp and QuestDiagnostics are the best labs in the US. However, the machine error between tests, even with the same provider, is 10%. As such, changes of 10% or lower should not be regarded as significant.
Since LDL and UIBC weren't measured by Quest, I didn't include them in the comparison. Also, the biomarkers in the Liver Enzymes Group (ALT, AST, GGT, Albumin) changed very little (by about 1%). They were also all in the optimized zone, so I didn't include them in the charts.
The main effect of this intervention that I was hoping for, was a reduction in inflammation. Two biomarkers for inflammation are white cell counts and CRP. How did these change?
Based on these two biomarkers, it doesn't seem that the fast provided much benefit. My nasal congestion and skin condition showed no change. Gil didn't have any particular insight into this. It's possible that the white blood cell count dropped, then new leukocytes were produced as the cancer patients study suggests, but we can't distinguish between the two types of cells.
Other biomarkers showed more significant changes:
Fasting glucose dropped from 92 to 70 mg/dL. Gil said that was a desirable change and something he expected. Lower values that are above 64 mg/dL are good for healthy adult males.
Triglycerides almost tripled from 36 to 105 mg/dL, within the normal range but above the optimal zone (100 mg/dL or lower) recommended by the American Heart Association. Gil's comment: the spike was due to fat being broken down during the fast by the liver. This is good for those who target fat loss, but it should be mentioned that fasting will break down muscle as well.
Cortisol doubled, from 9 to 17.5 ug/dL. Note that there was a measurement problem, in that cortisol levels should be measured in the morning, while my tests were done at 2pm and 12:30pm. Only Quest brought up this aspect, so I'm not sure if InsideTracker compensated for both or only the second test. Gil mentioned that the spike in cortisol is expected due to the stress imposed by the fast.
Folate (Vitamin B9) almost doubled, from 12.2 to 20.8 ng/mL, into the "high" zone. From InsideTracker:
High levels of folic acid may mask Vitamin B12 deficiency and may affect the health of the nervous system.
Free testosterone dropped by 20%, from 10.4 pg/mL to 8.2 pg/mL, below the optimized range. InsideTracker advises that "Athletic performance suffers when free testosterone is low, because of decreases in lean muscle mass, energy, and competitive drive". I haven't tested my athletic performance in raw terms, but the push-ups performance increased from 25 before the fast to 35 after.
Sex Hormone Binding Globulin (SHBG) increased by ~50%, and got into the "very high" range (64 nmol/L). You don't want this to happen, because
SHBG inhibits the function of testosterone. Thus, bioavailability of testosterone is influenced by the level of SHBG. If you have too much SHBG, it binds more sex hormones and prevents these hormones from being active. If you don't have enough active sex hormones, your sex drive, your overall energy level, and your memory all suffer.
On the last night of the trial, my sexual performance was significantly lower than my average, yet nothing that led my partner to complain.
Ferritin increased by 30%, jumping even higher in the "High" range, to 306ng/mL. InsideTracker advises that "fatigue is sometimes a symptom of elevated ferritin"; however, I felt a lot more energized during the fast, to the point of having acute insomnia for two nights. However, 306ng/mL is outside of the normal range according to most laboratories. Wikipedia mentions an interesting study on ferritin excess:
According to a study of anorexia nervosa female patients, ferritin can be elevated during periods of acute malnourishment, perhaps due to iron going into storage as intravascular volume and thus the number of red blood cells falls.1
Iron dropped by 30%, into the optimized zone (121 -> 83 ug/dL). According to InsideTracker, "your body does not have any biochemical ways of removing iron. Instead, iron is lost through processes such as bleeding, menstruation, and breast-feeding." None of that happened during this trial, so I wonder if this is a measurement error, or misleading figure caused by the artificially low ferritin level explained above.
Transferrin saturation dropped into the optimized zone: 42% -> 31%.
Vitamin D dropped by 20%, from 44 to 36 ng/mL.
Sodium dropped into the "low" range, from 140 to 134 mmol/L. The percentage drop is small, but the optimized zone for sodium is narrow as well: 137 to 146. In fact, a value of 134 mmol/L qualifies as hypoanatremia. This was likely caused by inadequate supply of sodium in the little food I ate, combined with increased sodium excretion during starvation - a common problem with fasting.2 I might also have been extra water to quench hunger. Bottom line: supplement with sodium when fasting.
Zinc dropped by 15% (115 -> 97ug/dL), back into the optimized zone. See my article on zinc.
Is fasting for three days worth it? While my situation was relatively gray, based on the particular biomarkers you want to improve, it might be a good idea. You might also find that you feel better subjectively (stronger and more alert).
Please do leave a comment if you have a different understanding and interpretation of the biomarkers, or insight into how close LabCorp and QuestDiagnostics typically are. I hope that this data will help others who want to optimize specific areas of their health.
Kennedy A, Kohn M, Lammi A, Clarke S (2004). "Iron status and haematological changes in adolescent female inpatients with anorexia nervosa". J Paediatr Child Health 40 (8): 430ââ‰ÂÂ2. []PMID 15265182](https://www.ncbi.nlm.nih.gov/pubmed/15265182). ↩
"During starvation there is increased sodium excretion and a negative sodium balance even when a sodium supplement is given." - David M. Gozansky and Robert H. Herman. The American Journal of Clinical Nutrition 24: July 1971, pp. 869-871. ↩