354 karma · joined July 17, 2007
1. Pick a simple but relatively obscure data structure, something they are unlikely to have crammed the night before. I always start by asking the candidate if they are familiar with it; the answer is almost universally "no". I then pull out a wikipedia printout and a notepad, and spend 10 minutes explaining it to them, with diagrams. Once they are sure they have understood the basic operations, I ask them to implement one of these basic operation we just walked through. The amount of code here should be ~10 lines; keep on adding simplifying assumptions until it is.
2. Pick a fundamental data structure from a high-level language runtime, something you would use without thinking: python lists, javascript objects, that kind of thing. I emphasise that familiarity with said language is not required, and list some real-world properties and performance characteristics (access speed, iteration, ordering, mutation), as well as common and less-common use cases. I then ask the candidate how they think it is implemented under the hood (i.e., if you wanted these semantics in a language that didn't natively provide them, how would you do it?) I often don't have a full answer myself, so we brainstorm the requirements and implementations together; no code, just open-ended discussion. The best candidates have often emailed me afterwards, having looked up an actual open-source implementation.
tl;dr: upgrading to a newer car with better efficiency saves about 10% in lifetime carbon footprint, vs 25% that is used pre-purchase. This is ICE, but I would guess the manufacture and disposal footprint of an electric is even higher.
$ node
> _ = "hi"
'hi'
> _
'hi'
> foo = "bar"
'bar'
> _
'bar'
(See mattnewton's reply for explanation.)I am sure they considered it and figured it wasn't a good model for them. It is unfortunate that I have (with much pleasure) used rethinkdb in several projects, yet haven't had a chance to pay them for a service that would be useful to me.
We don't store credentials on the phone, and the tokens we issue for each interaction are short-lived.
Edit to add: As a US citizen you are required to pay taxes on worldwide income even while not living in the US. As a US tax resident, you are required to pay taxes on worldwide income only as long as you remain a US tax resident, i.e. you file a US tax return.
http://eliasbizannes.com/blog/2012/07/how-to-become-a-full-t...
https://geoffmcqueen.com/2011/09/28/e-3-visa-for-australians...
Essentially, you elect a board that hires (and, importantly, can fire) you.
--asterisk=height
--i=serifs_round
--l=serifs_round
--zero=slash
--lineHeight=1.4[1] http://developer.android.com/guide/topics/ui/declaring-layou...
Perhaps this isn't the best implementation of such namespacing (maybe they could've done something more with xmlns?) but I find the visual and semantic distinction useful when reading and writing layouts.
https://news.ycombinator.com/item?id=11526923 [Intro, C++]
Another thing Australia has, besides IRV, is compulsory voting.
For the sake of discussion, here is my set of best practices.
I review libraries before adding them to my project. This involves skimming the code or reading it in its entirety if short, skimming the list of its dependencies, and making some quality judgements on liveliness, reliability, and maintainability in case I need to fix things myself. Note that length isn't a factor on its own, but may figure into some of these other estimates. I have on occasion pasted short modules directly into my code because I didn't think their recursive dependencies were justified.
I then pin the library version and all of its dependencies with npm-shrinkwrap.
Periodically, or when I need specific changes, I use npm-check to review updates. Here, I actually do look at all the changes since my pinned version, through a combination of change and commit logs. I make the call on whether the fixes and improvements outweigh the risk of updating; usually the changes are trivial and the answer is yes, so I update, shrinkwrap, skim the diff, done.
I prefer not to pull in dependencies at deploy time, since I don't need the headache of github or npm being down when I need to deploy, and production machines may not have external internet access, let alone toolchains for compiling binary modules. Npm-pack followed by npm-install of the tarball is your friend here, and gets you pretty close to 100% reproducible deploys and rollbacks.
This list intentionally has lots of judgement calls and few absolute rules. I don't follow all of them for all of my projects, but it is what I would consider a reasonable process for things that matter.
[edit: I should add that this only applies to end products which are actually deployed. For my modules, I try to keep dependency version ranges at defaults, and recommend others do the same. All this pinning and packing is really the responsibility of the last user in the chain, and from experience, you will make their life significantly more difficult if you pin your own module dependencies.]