Most tech startups acquired in 2012 had no VC funding - <AUTHOR> http://www.zdnet.com/most-tech-start-ups-acquired-in-2012-had-no-vc-funding-7000010561/

<comment><USER2> I'd expect this to be the case every year.

Companies can only acquire companies they can afford. When you take outside investment, your investors want a significant return, which places a floor on your acquisition price. The value you have to create gets bigger, and the pool of companies that can acquire you gets smaller.

Raising money is hard, but should you want to and manage to, it's very easy to paint your self into a high-valuation corner that blocks all sorts of opportunities to make life-changing amounts of money.

<comment><USER3> No, raising money doesn't put a floor under your acquisition price. It puts a floor under the acquisition price at which the founders make money.

So while a company can certainly paint itself into a corner by raising too much, that phenomenon is not what's responsible for the statistic quoted in this article. If you paint yourself into a corner by raising too much, it doesn't decrease the probability that your company will be acquired, just how much money you'll make personally if it is.

If anything, raising too much money _increases_ the probability a company will be acquired, because (by definition of "too much") it increases the probability the company will fail, and a fire-sale acquisition is the default outcome for companies that have raised a lot of VC funding.

<comment><USER2> Fair enough, fire-sales happen all the time.

Perhaps I should have written 'puts a floor under your acquisition price until your company fails.'

</comment></comment></comment><comment><USER3> This is rather a meaningless statistic, because acquisitions have a power-law distribution. Most acquisitions are HR acquisitions.

<comment><USER4> Our firm (CB Insights) put out the report that this article references so some additional color on this.

Unfortunately, there is no data to support PG's assertion above (or refute it) about most acquisitions are HR acquisitions so I won't try to address that part of his comment.

The power law is real. Only 0.35% of private tech company acquisitions in 2012 were > $1B (8 of 2277). And more than 50% were less than $50M and more than 80% were less than $200M (of those with disclosed values).

If you really like graphs, the full report is here - [http://www.cbinsights.com/reports/Private%20Tech%20Company%2...](http://www.cbinsights.com/reports/Private%20Tech%20Company%20M&A%20Report%20-%20CB%20Insights.pdf)

<comment><USER3> What definition of "institutional funding" did you use in the report? The wording implies that you didn't count angel investments as institutional funding. So how do you treat angel-sized investments by VCs? Does "institutional investment" mean only series A rounds and later, or would that also include a $100k investment by a VC firm in a seed round?

Also, what is your definition of an institutional investor? Do you count super-angels like Jeff Clavier and Aydin Senkut?

</comment></comment></comment><comment><USER5> This makes sense, because companies that don't take VC funding are the ones that didn't need it because they were turning profits from the start. However, there are a LOT more companies that don't get VC funding and never succeed.

<comment><USER6> Or they have little to no profit, run out of money, and seek an aquihire.

<comment><USER7> Right ... this scenario is _far_ more likely as, at the moment, it is very much in vogue for larger companies to snatch up the engineers around smaller, flailing companies that did not have enough revenue to sustain and could not attract funding to keep the engine running longer.

Many acquisitions that I saw this year were either starving engineers or soft landings.

</comment></comment></comment><comment><USER8> Less than 1% of companies get VC funding, so getting funded makes you more than 24x more likely to get acquired.

I wish the report had more bayesian probabilities to account for survivor- bias.

</comment><comment><USER9> Seems like a vanity statistic to me. Most companies don't have VC funding so this is to be expected. At least compare this data to prior years.

</comment><comment><USER10> I would need to see a list of the companies before drawing too many conclusions. Is there some reason the list is not available?

<comment><USER11> It appears that the company behind this study is running a business selling data - that's why.

</comment></comment><comment><USER12> Based on raw numbers, true - based on returns, not even close. It is hard to find a $1B+ or multi-hundred million acquisition that doesn't have a VC investment.

</comment><comment><USER13> I think many of those were acqui hires.</comment>


Webapps are ruining you life: Or, the future is micropayments - <AUTHOR> http://jordangreenaway.tumblr.com/post/3210370420/web-applications-are-ruining-your-life Originally submitted as .pdf. <comment><USER2> After reading (most of) the article, I'm not so sure about Jordan's premise. Can we really assume that webapps are really designed to streamline our lives? Perhaps that's the _idea_ behind them, but let's consider the example of a (generic) news aggregator. Here's an application which, if I understand correctly, gathers news articles it deems of likely interest to the user. In theory, this saves the user hours of searching for these articles himself, but let's ask ourselves: would any user spend that kind of time, every day, looking for articles _without_ the aggregator?

Many would, perhaps. I think most, however, would simply let it go, and save their attention for the items that rise to general attention more or less on their own. What the aggregator does, by dredging up _any_ articles it deems potentially interesting, is to encourage the user to read more articles he might have otherwise missed or skipped, thereby spending _more_ time reading; more even, perhaps, than he would have spent searching.

Now, it might be argued that such aggregators serve the user by alerting them to important articles _before_ they become Big News. Although it's really beside the point, the fact is that most articles simply aren't going to rise to that level of importance. The user ultimately has to decide whether it's worth the effort to read them all; or how much time to spend deciding what to read, on top of the time spent reading. It all adds up to time spent on the aggregator's results, that might never have spent at all without them.

I _really_ don't think Facebook is meant to simplify communication at all! It certainly hasn't been my experience. It's made it easier to find and contact other people, after a fashion, but then you've got to deal with all of those connections! Whose stuff do you actually want to see on your wall? (HINT: NOT every friend you've got, if you've got more than five!) What do you do about all those "gifts" and "invitations" to storm yet another castle? Can you just ignore them, or do you have to worry about somebody's feelings if you turn them down? Then, if you _do_ take the gift, you get your turn to send your own! And, if you think for a moment, you might consider the quandary you just faced, and wonder if you really want to put other "friends" through the same thing? Now, maybe I'm just overthinking all of this, but to me, this doesn't sound like simplified communication. If that's what Facebook really meant to achieve, I think they've been doing it wrong.

This is before we even get to Jordan's point: the extra ad-riddled pages. To tell the truth, annoying as the ads can be, they really haven't seemed that much of a problem to me. Facebook doesn't even shove them in my face, just tucks them off to the right, where I can easily ignore them. In fact, what's annoyed me the most about advertisements is that they're all for about the same five different things! Seriously, if I'm going to have to look at fifty different ads, could they try to find at _least_ twenty-five _good_ products to promote? I probably still won't buy anything, but at least I could not-buy more stuff!

Anyway, that brings us to Jordan's solution: paid accounts, if I'm reading correctly. Pay to get rid of the ads, pay for fewer pages to click through, pay for less of whatever annoys you? I don't know. It seems to me I could save a lot of money, _and_ a lot of time with a completely different solution: ditch the service entirely. I never needed Facebook in the first place, and only got in after receiving invitations from two different friends (as in people I actually know and like), one of whom had all but ditched the service himself by the time I finally took them up. I just might be the sociable type who benefits from a service like Facebook, but then I have to wonder: does someone who's actually sociable need an app to help them in that department? Keeping track of your contacts, sure, it can be helpful. Finding lost friends? Almost amazingly good! Actually being sociable? Eh, pick up the phone. Or email, whatever.

<comment><USER3> > Pay to get rid of the ads, pay for fewer pages to click through, pay for > less of whatever annoys you? I don't know. It seems to me I could save a lot > of money, and a lot of time with a completely different solution: ditch the > service entirely.

It's not that we don't need their functionality. The point is, we come for the basic solution, but we're flooded with a whole ecosystem which is far from the core functionality we seek. I could loosely compare the 'paying for less' idea to sportified versions of road cars - there are a lot of such examples in the automotive industry, where a more expensive version is the one where producers got rid of all unnecessary items and instead boosted only the core values - power, speed, handling, weight loss (Porsche GT3RS, BMW M3 CSL, Mercedes Black Series, and lots of others). And you get what you really want - you didn't get rid of the car, you got a faster better handling car without 4-zone a/c and 2 speakers instead of 16. Not a direct example, but you get the point: sometimes less can be worth more.

Summary: the annoyances are there because they need it, maybe if we paid them, they wouldn't be there.

</comment></comment><comment><USER4> I think this is a problem social media is going to have to solve. Much of the privacy/data mining/etc issues stem from the fact that advertisers are the customers, not the users. And with the absurd valuations, there's going to be an insane pressure to monetize which is going to lead to some really dodgy business decisions. So there has to be another way.

Reddit's gold subscriptions are $3.99 a month. Maybe this is too much? What if Facebook started charging $1 a month to remove ads? What about $0.50? Would people pay it? At that point, it's really not the cost that's an issue, it's the hassle of signing up.

I do really like the idea of an aggregator service where the providers receive a cut of the subscription. But is an API (say, restful JSON) so much less bandwidth-intensive on a large scale that this is more viable?

<comment><USER2> You know, I really never wanted to join Facebook in the first place. I only got involved after a couple of friends invited me. After about half a year blowing _way_ too much time on Farm Town, Mafia Wars, etc., I pulled way back, and only drop on occasionally now, usually just when I get the odd notice in my email. If FB started trying to charge me for _anything_ , I'd give 'em the Holy Water and Silver Cross for good. Of course, there's still the matter of what personal information I've actually given them, and the challange of getting it removed, which brings up an interesting thought:

How likely might Facebook try to monetize its 'assets' by charging users for its privacy protections? Maybe they'd start offering to close/scrub accounts... for a fee? It reminds me the old joke about the school band's free concert. Admission costs nothing, but you'll pay ten bucks to get out!

Given

</comment></comment><comment><USER3> My problem with most of social, sharing, reading apps is that they save time in the beginning, but reality is the more you engage, the more you notice they all have a very low signal to noise ratio. I don't need to administer all my streams from one app, what I need is apps that give me the content and functionality I really need instead of generating an endless flow of links (the long tail).

IMO personalised web is in its infancy. And that's where I agree with Jordan, that for the moment developers want us to waste time and boost stats, so we're flooded with suggestions we don't want on websites bloated by functionality we don't need. Paying for apps just to be able to get rid of distractors and replace them with better quality services seems like a solution.

</comment><comment><USER5>
       If you are not paying for it, you're not the customer; you're the product being sold.

Source/Discussion: <http://news.ycombinator.com/item?id=1684732></comment>


Typing the Letters A-E-S Into Your Code (2009) - <AUTHOR> http://chargen.matasano.com/chargen/2009/7/22/if-youre-typing-the-letters-a-e-s-into-your-code-youre-doing.html <comment><USER2> I have a comment more on the presentation than the content. I actually really enjoyed the "script format" type presentation more than I thought I would when I first staerted reading it. Having the article be a conversation between two (and more) people helped to explain various aspects of the topic (just as a conversation would normally digress), without getting "single speaker fatigue" as I often get when listening to a traditional lecture. Instead each character had their own voice and personality. The incidental details also helped me picture the scene as if it really were a movie, and brought the content to life in a way simply reading a standard article description would not.

I think this could also be interesting to see in an actually filmed format, and could be applicable to more topics than just security/cryptography. Maybe instead of "Comedians in Cars Getting Coffee" we could have "Computer Scientists in Cars Getting Coffee".

Right now it seems like most of the video content about this field is in either the single lecturer/presenter format, the interview format, or the unscripted Q&A panel format, but I have not seen many (or even any) multicharacter scripted pieces, as the original article presented. It seems like there is room to innovate in this space. Your "characters" could each have different concerns, and their contribution to the topic discussion would be scripted explain the topic in terms of their "personality" (the performance junky, the "paranoid" security person, etc). I'm just talking off the top of my head here, so I'm sure there are some more interesting ways to run with this concept.

If anyone has actually done something like this, I would appreciate if someone could reply with link or some more information about that project. If not I think it could be a project worth pursuing.

<comment><USER3> In some ways, it's a tried and true concept

[http://en.wikipedia.org/wiki/Category:Dialogues_of_Plato](http://en.wikipedia.org/wiki/Category:Dialogues_of_Plato)

<comment><USER4> Also used extensively, and to great effect, in Godel, Escher, Bach.

</comment></comment></comment><comment><USER5> Luckily, in PHP land, I can do it wrong without ever having to type the letters A-E-S anywhere, because the relevant mcrypt constants are named MCRYPT_RIJNDAEL_128, MCRYPT_RIJNDAEL_192, and MCRYPT_RIJNDAEL_256.

Nevermind the fact that only MCRYPT_RIJNDAEL_128 is actually AES, most developers choose MCRYPT_RIJNDAEL_256 and claim they're implementing AES-256.

To wit (trigger warning, encraption and severe arrogance on its developer's behalf follows):

[https://github.com/opencart/opencart/blob/99bcfb24519ef3a411...](https://github.com/opencart/opencart/blob/99bcfb24519ef3a4117e9300ea759e58e4c0826d/upload/system/library/encryption.php)

[https://github.com/opencart/opencart/issues/1279](https://github.com/opencart/opencart/issues/1279)

[https://github.com/opencart/opencart/issues/1594](https://github.com/opencart/opencart/issues/1594)

And this is an eCommerce platform.

If anyone is feeling frustrated by the constant "don't roll your own crypto" advice from the experts, it's being said for a _damn_ good reason.

Also, don't use opencart's encryption library.

<comment><USER6> It is out of question that you can do it wrong without typing A-E-S: Crypto is hard, and you can always fuck up in an infinite amount of ways.

That being said, do you have any reference on MCRYPT_RIJNDAEL_256 being an actual problem? The linked OpenCart issues deal with ECB mode and missing authentication, rather than the block size.

<comment><USER5> It's not really a _problem_ so much as it's not doing what they think it's doing. 256-bit block-size Rijndael might even be better than 128-bit (AES). I don't know.

</comment></comment></comment><comment><USER7> I'm flattered by the attention, as always.

Couple quick things:

On our original blog (I have nothing to do with this one; I haven't been at Matasano for several months), this was CSS-formatted to look like an actual script, which I think makes it significantly easier to follow. Dave Wagner copied it to his website, and it's closer to the original:

[http://www.cs.berkeley.edu/~daw/teaching/cs261-f12/misc/if.h...](http://www.cs.berkeley.edu/~daw/teaching/cs261-f12/misc/if.html)

Second: in case you're impatient (I would be), conceptually, this is what the post is trying to communicate:

* Unauthenticated CBC is surprisingly malleable. There are two attacks in here that I thought were "clever": using totally random CBC block garbling strategically to eat quote characters and synthesize SQL injection (the motivating example for the post, after I pulled this attack off on a real system) and "stuffing" inputs with known plaintext to make rewriting easier.

* CBC padding oracles. I would be interested if anyone knows a source outside of academic literature that walked through this attack published prior to 2009.

It is not about how to implement single sign-on cookies.

The nice thing about posts about cryptographic attacks, as opposed to cryptographic constructions, is that they age pretty well. :)

</comment><comment><USER8> I found this a bit surreal, because the answer in Flask is roughly:

1\. Generate a server signing key using urandom(key_length).encode('base-64') and store it in app.config['SECRET_KEY'] via config.py and appropriate .gitignore, or environment variables, whatever toots your horn.

2\. You now have a secure signed session cookie, congratulations. This is a "user session data" cookie, i.e. a simple key-value store in the user's cookies accessed from flask via session['key'], so set session['sid'] to some long random .encode('base-64') key that maps to the user via Redis (or your RDB, if you want to only use that).

3\. Use Flask's @app.before_request decorator to determine who owns the session ID and store the appropriate user ID in the Flask.g request context.

4\. The @app.route gets the user ID from Flask.g, never the session. Any calls it makes that need to know which user are given the internal ID directly (i.e. the user ID in the users table).

A lot of people don't even go to that extent, you can do more or less the same thing via Flask-Login or Flask-KVsession. If you're using either, I'd recommend reading through the project code on GitHub to see what happens as a result of the context decorators. It's not terribly complicated in either case.

So back to the original problem, if you want both services to be able to verify the signing data, you give them the same app.config['SECRET_KEY'] and have them share data about how session keys map to users.

Or you could use an "I am Joe Johnson" cookie schema and forego session keys, if that's appropriate. If so, just put it in session['username'] and let the session sign it. Ta da, done.

If you have to start thinking about encryption strategies in Flask, beyond "use passlib.hash.bcrypt_sha256 on user passwords," you done fucked up already. It has great tools to keep you from ever having to touch that stuff, so please use them.

The above story should be roughly equivalent for Rails, once you change the names around. Node.js, I'm not sure, but there's probably a library for that by now. Use it.

<comment><USER9> If you think answering the SSO question is the point of this piece, you haven't read it properly.

</comment></comment><comment><USER10> Obligatory Doom principle link. [http://www.thoughtcrime.org/blog/the- cryptographic-doom-prin...](http://www.thoughtcrime.org/blog/the- cryptographic-doom-principle/)

Encrypt Then Authenticate, dammit!

<comment><USER11> Or, from the inverse perspective: always authenticate and/or verify the integrity of data before processing it at all, whether that processing be decryption, string manipulation, or otherwise.

<comment><USER12> Which you can't do if the MAC is within the encrypted message.

<comment><USER11> Of course. EtM is the only way to go. Just saying it can be applied to other areas, too.

</comment></comment></comment></comment><comment><USER13> Rule of crypto #1 - never implement your own crypto.

If you want to know what they are talking about, here are two free courses that go over all of that stuff and more. I particularly liked error oracle decryption exercise from coursera crypto class:

[https://www.coursera.org/course/crypto](https://www.coursera.org/course/crypto)

[https://www.udacity.com/course/cs387](https://www.udacity.com/course/cs387)

<comment><USER14> Someone, somewhere had to implement their own crypto, or there wouldn't be any crypto.

<comment><USER15> Yes, but they did it wrong. But someone else caught the bug and fixed it. But the fix was wrong, but yet another person caught that bug and fixed it. But their fix was wrong, but it got fixed, but that was wrong... and the next, and the next... Repeat for as long as the library has been in active use and development.

That's the value of using established libraries. It's not necessarily that those library authors are so much smarter than the rest of us (although maybe a few are). It's that they already know a lot of the ways that their code was wrong.

If you write it yourself, who's going to catch your bugs? Then who's going to catch theirs?

This is not specific to crypto code, but crypto code is probably harder than most to get right, and more likely to be used on serious stuff.

<comment><USER14> What says any particular person _will_ write said bugs? We have a word for automatically assuming that any particular individual holds any particular trait of the group of which they are a member without first confirming that person has that trait. It's called prejudice. And yes, you can be prejudiced towards your own in-group.

Good crypto code needs a good understanding of crypto and a good understanding of code. The person who has both is rare. Far too frequently, the situation you've described comes about because the only people writing crypto code are the people who understand crypto.

And I think the admonishment "don't write your own crypto code" is peer- pressuring people who have a good understanding of code from abstaining from gaining a good understanding of crypto.

<comment><USER15> When it comes to putting bugs in software, I am prejudiced against the human race. :-)

Folks saying "don't write your own crypto" are really talking about production systems that will serve customers, employees, governments, etc. Crypto is not going to be a market differentiator; it just needs to work. So why not stand on the shoulders of many others and use a library that is already well tested and patched up?

But in terms of spending your own time to learn, I doubt many folks would say don't do that. Matasano even provides a bunch of freely available materials to do just that.

</comment></comment></comment></comment></comment><comment><USER16> I know the cookie example was just an excuse to talk about cryptography but I found it strange that there was no mention of using a randomly generated session ID and a session store as most web frameworks do.

<comment><USER17> Plaintext SID? Couldn't you just replay that SID then? Or generate random SIDs and see what sticks?

<comment><USER18> If your SIDs are large enough, it's no different from generating random encrypted cookies until one works, so not practical at all.

</comment></comment></comment><comment><USER19> Obligatory link if you really want to write A-E-S into your code: Matasano Crypto Challenge [http://cryptopals.com/](http://cryptopals.com/)

The article author was involved there too.

</comment><comment><USER20> There's a portion that says that using SHA-1 for generating a key is bad. Can anyone explain why ?

<comment><USER21> [http://codahale.com/how-to-safely-store-a-password/](http://codahale.com/how- to-safely-store-a-password/)

<comment><USER22> That link is not wrong, but scrypt is probably significantly better than bcrypt, and PBKDF2 is not terrible, if you don't have a handy bcrypt/scrypt library.

</comment></comment></comment><comment><USER23> But if I use gpg, the default algorithm is CAST-5, so I'll probably still type AES in my code for --cipher-algo AES256 (or API equivalent) :-P (this is mostly in jest, I know that CAST-5 is usually a reasonable default)

</comment><comment><USER24> Closing with a Futurama quote. Nicely done.

</comment><comment><USER25> Portions directly copied from comedian Louis C.K.

<comment><USER7> No. Really? You don't say!

I don't know why they chose to republish this just now, but if you find the original date, you'll see that the reference was much more obvious when we first published it, many years ago.

(The "portion" he's referring to is the Louis CK coffee shop bit.)

</comment></comment><comment><USER26> Especially since the NSA has had atleast "a handful of in-house" attacks on AES since 2012. AES(Rijndael) was given a score 1.11 in the AES competition and to put that in context a score of 1.0 is considered a broken cipher. Blowfish scored over 3.0 and was clearly a much stronger candidate algorithm. [http://www.spiegel.de/international/germany/bild-1010361-793...](http://www.spiegel.de/international/germany/bild-1010361-793640.html)

<comment><USER21> Blowfish? Really? Do you know what you're talking about?

<comment><USER26> Serpent is the cipher with the score over 3.0 not Blowfish my mistake. But seriously I would read up instead of trusting the conventional wisdom when it comes to the strongest cipher. [http://qr.ae/6wveK](http://qr.ae/6wveK)

<comment><USER27> So Serpent appears to be strongest, just slow? Is time really that big of an issue? I mean, why not spend a few extra seconds encrypting something if it is that much more secure?

<comment><USER5> If by seconds you mean milliseconds ;)

</comment></comment></comment></comment></comment><comment><USER28> _" If You're Typing the Letters A-E-S Into Your Code You're Doing It Wrong"_

What if I'm signing a comment, "MAESTRO"?

<comment><USER28> ... then I'm still doing it wrong. Got it.</comment></comment>


For the Love of God, Ask FizzBuzz - <AUTHOR> http://brianbrunner.com/interviews/2013/10/25/fizzbuzz.html <comment><USER2> When I try to see if a person knows how to "think", I start with fizzbuzz and then ask them to do it again without if or case statements. The first time a person is asked something like that you see if they're a thinker or if they just go "that can't be done." That question does a good job dividing people into a group that in 5 years time will ether have 5 years of experience or 1 year of experience repeated 5 times.

<comment> taylor-smith I love the five years experience vs. one year of experience repeated five times idea

<comment><USER3> Same, I've added that to my 'remember this' list of phrases/quotes/terminology.

</comment></comment></comment><comment><USER4> For an entry-level position? Sure. For a senior-level position? Don't waste my time. I disagree that the Github repo, resume, etc are useless. You can glean a ton of information about me from those data points that can tell you whether I can code or not. You want to know whether I can think or do basic programming skills? Ask me about my repo. Ask me about projects I've done. If I actually wrote that code, I'd be more than happy to go into detail about the work I've done.

Like someone else said, we wax poetic about DRY all the time, yet you're asking me to take time out of my day to repeat things I already know when that data has already been provided for you. Sigh.

You should be able to have an idea of whether I'm a suitable candidate or not before you even call me, and you should know whether I can code or not before you even bring me into your office.

Entry level position? FizzBuzz all day long. It's the only way you'll find out.

Mid- to Senior-level position? There are better ways to figure out my competency level.

My two cents.

<comment><USER5> I don't believe the article said that the repo, resume, etc. are useless, it's just that you need to establish a baseline of "can this person code"?

Having done hundreds of interviews, I'm sorry to say that even seemingly "senior-level" people (people with years of programming "experience" on their resume) have shown an inability to do basic coding from scratch. It seems there's a subset of developers who cobble stuff together and code-and-fix to make things work. This is ironically less of a problem with entry-level people.

Yes, if you have a public repo of code, I'll ask you about it, but I want to see you live code something, both to see the code you write and your thinking process about solving the problem. If you feel that's a waste of your time (and if you're truly senior-level, it really won't take very long at all), that's fine, but I will continue to do it.

<comment><USER6> > even seemingly "senior-level" people (people with years of programming > "experience" on their resume) have shown an inability to do basic coding > from scratch.

I wouldn't have believed you a few months ago (and your statement is still stronger than my experience), but I've finally seen people who are so maintenance-bound, that even though they're good at _that_, they've never managed to learn the language (the corners, idioms, and semantics) they've been maintaining. It's probably a sign of heroism that they picked up enough to do so on the fly, but, you wouldn't hire them to write new code.

</comment></comment></comment><comment><USER7> I have been doing a lot of phone screens for our company lately. We ask a FizzBuzz like question in our first phone screen.

So far, only 30% of applicants manage to go pass this point.

It's actually quite hard to believe. Guys who claim to have multiple apps under their belt simply cannot write code. I often question them on what they did in their past and what was their actual contribution to their team. The two most common scenarios are either the so-called technical manager who got promoted there become of lack of coding abilities or the self-taught programmer who was hired by the technical manager. By self-taught, I mean someone who can write HTML and copy/paste JavaScript code from somewhere.

</comment><comment><USER8> When hiring "Experienced C Programmers", I would just show them a the short version of strcpy() out of K&R, but with variable names change from 'src' and 'dst' to 'x' and 'y'.

Just to read it and say what it did. This eliminated the vast majority of the applicants:

void strcpy(char _x, char_ y) { while( _x++ =_ y++); }

<comment><USER9>
        void strcpy(char *x, char *y) { while(*x++ = *y++); }

In this example, why does the loop terminate? Is it because the null terminator counted as a _false_?

<comment><USER10> Exactly, since C strings are just pointers to raw memory you usually assume that either the user passes the length explicitly to you or that they're \0-terminated.

</comment></comment></comment><comment><USER11> I suspect the same people who complain about being asked fizzbuzz are the same people who complain about getting their ID checked when they buy alcohol.

I can implement fizzbuzz in < 30 seconds in half a dozen languages (in vim, maybe < 60 seconds on paper/whiteboard). I don't really take offense to being asked to blow 30 seconds; I understand where the interviewer is coming from the same way I understand where a cashier asking for my ID is coming from.

<comment><USER12> I think a lot of people who complain don't realize that a decent amount of people do fail FizzBuzz. If they are as smart as they think they are, then they would definitely appreciate not having people on their team who cannot complete FizzBuzz!

I have asked this question before and a lot of people don't know the mod operator and so they struggle and eventually it occurs to them to divide and check the remainder. This usually leads to kinda sloppy looking code, but, I find it to be very revealing about their problem solving abilities. Some people just give up. Some people ask for help. Some people get angry or flustered. All of these scenarios are extremely revealing and help you to understand the candidate's approach to problems.

When the candidate already knows FizzBuzz then the results are usually less interesting - but sometimes they may solve it is some really unusual way which is cool to see.

<comment><USER11> You said it was cool to see unusual FizzBuzz solutions, so I just coded this up in the last 10 minutes. So... FizzBuzz without any modulo or division operations!

        #include <stdio.h>
        int f0(unsigned int x) { return x? (x&(1<<31)? f1(x<<1) : f0(x<<1)) : 1; }
        int f1(unsigned int x) { return x? (x&(1<<31)? f3(x<<1) : f2(x<<1)) : 0; }
        int f2(unsigned int x) { return x? (x&(1<<31)? f0(x<<1) : f4(x<<1)) : 0; }
        int f3(unsigned int x) { return x? (x&(1<<31)? f2(x<<1) : f1(x<<1)) : 0; }
        int f4(unsigned int x) { return x? (x&(1<<31)? f4(x<<1) : f3(x<<1)) : 0; }

        int t0(unsigned int x) { return x? (x&(1<<31)? t1(x<<1) : t0(x<<1)) : 1; }
        int t1(unsigned int x) { return x? (x&(1<<31)? t0(x<<1) : t2(x<<1)) : 0; }
        int t2(unsigned int x) { return x? (x&(1<<31)? t2(x<<1) : t1(x<<1)) : 0; }

        void main() {
            unsigned int i;
            for(i=1; i <= 100; i++) {
                if(t0(i)) printf("Fizz");
                if(f0(i)) printf("Buzz");
                if(!(t0(i)|f0(i))) printf("%u",i);
                printf("\n");
            }
        }

<comment><USER12> fantastic! I would be rightfully impressed and amused!

</comment></comment></comment></comment><comment><USER13> I've heard from multiple sources that people fail fizzbuzz. I now read multiple posts here saying the same. As a hobbyist programmer with a few free lance projects under my belt who never worked in "the industry" I find it simply fascinating. My first reaction is that maybe your interview is very stressing or maybe you ask the applicants to write the code on paper and fail them for any typo. I just can't believe anybody, anybody who ever programmed anything failed such tests in reasonable environment. I mean if I couldn't write fizz-buzz I would never get any code to work. I mean I imagine myself failing to implement a dictionary in C having limited time and being under pressure without a bug somewhere but fizz-buzz ? really ? :)

<comment><USER14> These are people who have never (will never?) write any actual working code. Through a combination of lying on their resume/bullshitting interviews/hiding away during the actual job they've managed to get by. They are a small percentage of all "Programmers", but a large percentage of people looking for jobs (because they are more likely to be unemployed, more likely to fail an interview, and their best way to get a job is to try as many interviews as they can get).

I'd never be insulted by Fizzbuzz questions, it takes maybe a minute to solve and you can move from there to more interesting questions very easily. If Fizzbuzz is the closest thing to a time waste during the interview process, you're in pretty good shape.

</comment></comment><comment><USER15> If there is one thing around hiring programmers that I wish had more discussion, it's the notion from the interviewer's goal of "trying to understand how one thinks about a problem." Frankly, I don't think we're very good at it. And for good reason -- it's really hard.

My personal experience has been that most of us in the industry aren't well equipped to make that determination reliably among each other. The most successful interviewees I've ever seen are those with excellent pattern recognition and recall. Only a few of those are decent programmers (not even excellent.) But they're all very talented in describing ways of thinking.

In spite of information at hand, I rarely see those in hiring roles ever go away from "does this person think about this the way I do?" It is a very subjective task, so I don't fault those in these positions for following that process. But I think there's a perception in "understanding how a person thinks about a problem" that is flawed.

</comment><comment><USER16> And starting out in programming, for the love of code, learn how to do these. They set your brain in motion. And ProjectEuler.net

<comment><USER17> Project Euler, while great, is more about neat math tricks than actual programming.

<comment><USER18> It's about solving logical problems and expressing those solutions using code. Definitely useful.

<comment><USER17> Never said that it isn't useful.

</comment></comment></comment></comment><comment><USER19> > guarantees that neither the interviewer nor the candidate is wasting the > other's time

Yeah, it guarantees that only the interviewer is wasting the candidate's time. If you're hiring off the street I could possibly see some value in FizzBuzz, even though it's going to turn off any actual A player you happen to interview, but if I sent in a portfolio/past project/etc and you FizzBuzz me, I'm walking out. If you distrust a candidate that badly I can't imagine how micromanaged your employees must be.

FizzBuzz both saves you time by filtering out incompetent people, and saves actual competent people time by demonstrating that you're not willing to do what it takes to attract great hires. There's no shortcut to real interviews.

<comment> sjm-lbm I FizzBuzz all new developers I hire. Frankly, if you aren't prepared to spend the 5 (at most) minutes it takes to put FizzBuzz down in a language you say that you are an expert in, I'm ok with you walking.

Being a productive team member requires trust, and FizzBuzz is a _really_ low standard to start at when attempting to gain trust. I'd be openly suspicious that anyone who can't be bothered to run through FizzBuzz in an interview would be the type to complain that whatever task they are working on (that needs to be done) isn't RealProgramming(tm), and is beneath them.

<comment><USER20> I'm off the market, but if I were asked to do FizzBuzz on a tech intervieew, I would do it, but conditional on the interviewer doing something as idiotic immediately after that. Like write an iterator for a binary tree.

Treating the person on the other side of the table is a fake works both ways. Don't underestimate how actually _offensive_ a FizzBuzz question to a qualified developer is.

<comment><USER21> Think of it this way: they aren't trying to offend you - they're trying to show you that they're keeping all the other idiots who can't do FizzBuzz from joining the team.

FizzBuzz is a necessary but not sufficient standard for acceptable technical skill.

As a hiring manager, I'm not just amazed by how many people can't do FizzBuzz, but by how many people haven't even _heard_ of it before I ask it.

<comment> sjm-lbm > I'm not just amazed by how many people can't do FizzBuzz, but by how many > people haven't even heard of it before I ask it.

This is very true. I've often thought of pulling it from the list of questions just because of the visibility that it gets - I mean, I _do_ actually feel, to an extent, embarrassed asking it. Surely anyone who spends 30 whole minutes preparing for a job interview can find it on Google.

It still manages to be difficult for some people, though. And, really, that's something that I want to know quickly.

</comment></comment></comment></comment></comment><comment><USER22> Good article but why the hell that horrible font? If I was not hiring currently, I would not have bothered to try to read it...

<comment><USER23> Are we looking at different pages? [http://imgb.mp/jmI.jpg](http://imgb.mp/jmI.jpg)

<comment><USER21> Font renders differently on iPad (monospaced) vs Mac Book (your screenshot) for me.

<comment><USER22> I am on Win 8 Laptop with not much resolution and using Chrome, here the font is even thinner and has aliasing artifacts.

</comment></comment></comment></comment><comment><USER24> Yeah, fizzbuzz is a filter guys. Yes, you can read their code repos and do in depth interviews, but you shouldn't _waste your time_ until they can do something as simple as fizzbuzz. You will be truly surprised how many just don't pass that filter and are literally wasting your time.

To reiterate: necessary, but not sufficient.

</comment><comment> w0rd-driven "A good resume with a long list of well-known companies and a degree from a top-tier engineering school doesn't guarantee anything." I'm sorry but a year+ at those companies proves you've provided at least _something_ of worth to them. The real crux of the argument is can they solve the kinds of problems _your_ company faces.

I would certainly hope that the barrier to entry for every job I applied for wasn't something so standardized (and quite frankly, useless). I would eventually point to a github repo with it done already. We wax poetic about DRY yet you're gonna ask me to repeat myself? Seems pretty hypocritical to me.

<comment><USER25> You're missing the point. What you are not realizing is how many people actually _fail_ fizzbuzz.

If it seems so simple and useless to you because it's easy, then you are not one of the people who will ever be weeded out by a fizzbuzz style question.

Put it this way... Would you want to work with somebody who was unable to handle fizzbuzz?

<comment> w0rd-driven I definitely would not want to work with them and yet I have. My problem isn't the failure rate, its the repeated asking of a question I should be able to prove via a public repo. The repo should be more than adequate, I would hope. If it isn't, we would have much bigger problems of trust.

</comment></comment></comment><comment><USER26> I am still skeptical for the effectiveness of FizzBuzz. I wonder if there are actual science experimental result to support this hypothesis where asking FizzBuzz as a filter would actually be effective. I wonder what is the percentage of those candidates who failed this filter are actually the worst kind of candidates, and if those who passed this filter would turns out not be a good fit. I see no correlation between passing FizzBuzz and being a good fit, productive engineer. Most of the proponent of FizzBuzz seems to assume that engineering skills could be accurately form a pyramid, where there are some questions where you need to understand before tackling other higher level questions, and that people who don't understand the "basics" will not be able to grasp or excel in the skills in higher levels. May I ask how many interviews here have taken CS courses and may I ask how many of you find FizzBuzz is relevant to any of the courses you have taken? Do you need to know FizzBuzz in order to tackle the vast problem spaces of Computer Science? Do you need to know FizzBuzz by heart to have experienced working in a large projects with thousands of people? Do you need to know FizzBuzz to implement a binary tree? Do you need to excel in FizzBuzz to code up a language parser?

To me, it is absurd that people believe in FizzBuzz because I see this mindless ritual of asking FizzBuzz question can be best described as Cargo Cult Science as coined by Richard Feynman ([http://neurotheory.columbia.edu/~ken/cargo_cult.html](http://neurotheory.columbia.edu/~ken/cargo_cult.html)), where in this context of hiring, recruiters are hoping that by asking FizzBuzz he will definitely filter out all incompetent programmers/engineers so he won't have to waste time finding out if the candidates are actually suitable for the position and the team.

If FizzBuzz is the ultimate filter for the position he is applying for, or if it should be considered universal, then why wouldn't university teaches them to memorize all possible variations of them in their introductory programming classes? Also wouldn't you think people who are not good programmers would cheat his/her way out by simply memorize the solution? Then aren't you still wasting time asking FizzBuzz questions?

</comment><comment><USER27> I don't really understand; why not ask an actual substantial question in a phone interview? Poor candidates who would fail fizzbuzz would fail that too; good candidates would be expected to pass such a question anyway.

Either way, you're wasting an hour of eng time at most.

</comment><comment><USER28> Totally agree on asking FizzBuzz type questions first! I have understood a lot about the person just by asking simple questions. Most people fall into the trap of answering it in a very complicated way to advoid many if else if conditions for no reason! :P :)</comment>


Inception: Attention to detail [video] - <AUTHOR> http://bharat-drishti.blogspot.com/2010/07/inception-attention-to-detail.html

<comment><USER2> Wow this is pretty cool. Didn't realize that.</comment>


A woman's opinion on dick jokes at conferences - <AUTHOR> https://gist.github.com/2030063

<comment><USER2> She disparages, but then makes an "ass joke" (cf. "asshaterry"). The language of business is crude. Don't pretend otherwise. You sail the seven seas and you're going to hear sailor talk.

Granted : too much spice and the food is ruined.</comment>


Why Tech Companies Should Choose Cleveland - <AUTHOR> http://www.replyall.me/zach-talks/paul-allen-on-the-growth-of-midwest-start-ups/

<comment><AUTHOR> Btw, just some context here. This is an interview with Paul Allen from the Bizdom accelerator in Cleveland that I did on my blog. I actually thought he made some very compelling arguments for why entrepreneurs -- even techies -- should go against the grain and choose midwest markets to set up shop.</comment>


Windows file access performance compared to Linux - <AUTHOR> https://github.com/Microsoft/WSL/issues/873#issuecomment-425272829 <comment><USER2> I develop on Windows 10 because I'm a .NET developer and really like the idea of WSL. But the more I use it the more frustrated I become by its file access performance. I started off using it for Git but now I just use Git bash in Poweshell (which also annoys me with its slowness).

I haven't developed on an actual *NIX machine in years but recently I deployed something to my DO VPS and it "built" (php composer) in what felt like 1/100 of the time it was taking on my computer, whether running the Windows binaries in Powershell/CMD or the Linux binaries in WSL. Although I will say WSL is slower.

In fact, it was so fast that I'm about to call Microcenter and see about picking up a Thinkpad to install Linux on.

<comment><USER3> Curious just how feasible doing . NET dev in Linux would be? Is it a non start? Is it inconvenient and rough? Is it fine if you give it enough love?

<comment><USER4> It's the lack of visual studio that is often the nonstarter.

<comment><USER5> You can get by with vscode for a lot, but not everything I think.

<comment><USER3> Is this purely about convenience tools in an IDE or are there some things actually locked into the Windows environment? Is .NET a lot like Xcode where it's not like you can just download the libraries + compiler + a text editor and have all you need? The latter is broadly true for every language I've really dove into so this feels like a foreign concept.

Edit: what I could stand to gain is that I work weekly in four or five languages. Already well tooled up in Ubuntu and vscode. Nothing frustrates me more than having to keep multiple IDEs consistent. Imagine driving two cars all day that have their controls in all different places.

<comment><USER6> Depends on what you're doing. Some technologies are only supported on Windows (like the official UI frameworks), but most things like webdev and gamedev libraries are supported on all platforms. Giving up Visual Studio can be a hard sell, as from my experience C# + Visual Studio (+ ReSharper) is one of the most productive programming environments you can have.

You can download the SDK from [https://dotnet.microsoft.com/](https://dotnet.microsoft.com/) and use it on any platform with your editor of choice, including JetBrains Rider, which is a cross-platform .NET IDE.

<comment><USER7> Depending on your UI needs, may want to look at Eto.Forms and MonoGame. :-) That said, I agree on productivity for C# + VS. I find I'm more productive with node + npm + vs code though.

.Net Core hasn't been too bad outside VS... I do wish they'd stuck to the JSON project format. I also wish dotnet had a task runner like npm in it.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> I remember this issue (I commented in it a few years ago).

On the bright side, WSL as a development environment is no longer slow when it comes to real world usage. I've been using it for full time web app development for the last year and even made a video about my entire set up and configuration a week ago[0].

For example with WSL you can easily get <= 100ms code reloads even through a Docker for Windows volume on really big applications with thousands of files, such as a Rails app.

Even compiling ~200kb of SCSS through a few Webpack loaders (inside of Docker with a volume) takes ~600ms with Webpack's watcher. It's glorious.

I haven't had a single performance issue with a bunch of different Rails, Flask, Node, Phoenix and Jekyll apps (with and without Webpack). This is with all source code being mounted in from a spinning disk drive too, so it can get a lot faster.

So while maybe in a micro-benchmark, the WSL file system might be an order of magnitude slower (or worse) than native Linux, it doesn't really seem to matter much when you use it in practice.

[0]: [https://www.youtube.com/watch?v=5gu8wWX3Ob4](https://www.youtube.com/watch?v=5gu8wWX3Ob4)

<comment><USER9> > with WSL you can easily get <= 100ms code reloads even through a Docker for > Windows volume

(Edited after watching your video.)

In your video it looks like you're running things _in Docker containers_. Even if you start containers using WSL, they still run in a separate Hyper-V virtual machine with a true Linux kernel, whereas WSL shares the Windows kernel and works by mapping Linux system calls directly to Windows kernel calls. When you run the "docker" command in WSL, it's just communicating with the Docker daemon running outside of WSL.

Docker runs this way on Windows because WSL does not implement _all_ the Linux kernel system calls, only the most important ones needed by most applications, and the missing ones include some needed to run the Docker daemon.

All in all, this means that what you're talking about is not affected by the linked issue because it uses a different mechanism to access files (the Hyper-V driver rather than the WSL system call mapping). Although, if anything, I would expect Hyper-V to be even slower.

<comment><USER8> _(Your edit makes my reply make a lot less since since you removed all of your original questions, but I 'll leave my original reply, read the part after number 7)_

My set up is basically this:

1\. I use WSL as my day to day programming environment with the Ubuntu WSL terminal + tmux[0]. It's where I run a bunch of Linux tools and interact with my source code.

2\. I have Docker for Windows installed (since the Docker daemon doesn't run directly in WSL yet due to missing Linux kernel features like iptables, etc.).

3\. I installed Docker and Docker Compose inside of WSL but the daemon doesn't run in WSL. I just use the Docker CLI to communicate with Docker for Windows using DOCKER_HOST, so docker and docker-compose commands seamlessly work inside of WSL from my point of view[1].

4\. All of my source code lives on a spinning disk drive outside of WSL which I edit with VSCode which is installed on Windows.

5\. That source code drive is mounted into WSL using /etc/wsl.conf at / (but fstab works just as well)[2].

6\. That source code drive is also shared with Docker for Windows and available to be used as a volume in any container.

7\. All of my Dockerized web apps are running in Linux containers, but using this set up should be no problem if you use Windows containers I guess? I never used Windows containers, but that seems out of scope for WSL / Docker CLI. That comes down to Docker for Windows.

But, it's worth mentioning I have installed Ruby directly in WSL and didn't use Docker, and things are still just as fast as with Docker volumes. In fact, I run Jekyll directly in WSL without Docker because I really like live reload and I couldn't get that to work through Docker. My blog has like 200+ posts and 50+ drafts, and if I write a new blog post, Jekyll reloads the changes in about 3 seconds, and that's with Jekyll-Assets too. I have a feeling it wouldn't be that much faster even on native Linux since Jekyll is kind of slow, but I'm ok with a 3 second turn around considering it does so much good stuff for me.

[0]: [https://nickjanetakis.com/blog/conemu-vs-hyper-vs- terminus-v...](https://nickjanetakis.com/blog/conemu-vs-hyper-vs-terminus-vs- mobaxterm-terminator-vs-ubuntu-wsl)

[1]: [https://nickjanetakis.com/blog/setting-up-docker-for- windows...](https://nickjanetakis.com/blog/setting-up-docker-for-windows-and- wsl-to-work-flawlessly)

[2]: [https://github.com/nickjj/dotfiles/blob/master/etc/wsl.conf](https://github.com/nickjj/dotfiles/blob/master/etc/wsl.conf)

<comment><USER7> It's worth noting that copying in/out of the docker for windows container can be interesting. Docker for windows mirrors the content in the volume directory on windows to one native inside the container... for some editing, it's fine... but try something a SQLite database with a gui in windows, and a container in linux both connected, and it will blow up on you.

The mount in WSL is really adaptive calls to the native OS, so that side will work without issue... the sync inside the container while editing is fast enough, and the running/building in the container is faster than it would be on the WSL itself as described by GP.

</comment></comment></comment></comment><comment><USER10> I spent many years optimizing "stat-like" APIs for Picasa - Windows just feels very different than Linux once you're benchmarking.

It turns out Windows/SMB is very good at "give me all metadata over the wire for a directory" and not so fast at single file stat performance. On a high- latency network (e.g. Wi-Fi) the Windows approach is faster, but on a local disk (e.g., compiling code), Linux stat is faster.

<comment><USER11> I'm mostly clueless about Windows, so bear with me, but that makes no sense to me.

If SMB has some "give me stat info for all stuff in a directory" API call then that's obviously faster over the network since it eliminates N roundtrips, but I'd still expect a Linux SMB host to beat a Windows SMB host at that since FS operations are faster, the Linux host would also understand that protocol.

Unless what you mean is that Windows has some kernel-level "stat N" interface, so it beats Linux by avoiding the syscall overhead, or having a FS that's more optimized for that use-case. But then that would also be faster when using a SMB mount on localhost, and whether it's over a high-latency network wouldn't matter (actually that would amortize some of the benefits).

<comment><USER12> I think the idea is that you're accessing files sparsely and/or randomly.

With the linux approach you avoid translating (from disk representation to syscall representation) metadata you don't need, and the in-memory disk cache saves having to re-read it (and some filesystems require a seek for each directory entry to read the inode data structure, which can also be avoided it you don't care about that particular stat).

With the windows approach, the kernel knows you want multiple files from the same directory, so it can send a (slightly more expensive) bulk stat request, using only one round trip[0]. On linux, the kernel doesn't know whether you're grabbing a.txt,b.txt,... (single directory-wide stat) or foo/.get,bar/.git,... (multiple single stats that could be pipelined) or just a single file, so it makes sense to use the cheapest request initially. If it then sees another stat in the same directory, it might make a bulk request, but that still incurred a extra round trip, and may have added useless processing overhead if you only needed two files.

TLDR: Access to distant memory is faster if assuptions can be made about your access patterns, access to local memory is faster if you access less of the local memory.

0: I'm aware of protocol-induced round trips, but I don't think it effects the reasoning.

<comment><USER13> just think of they way the OSs are used.

get to a directory:

linux: cd /dir (no info) windows: open directory ... all the info and different views depending on your selection currently like image file thumbnails

in windows you are always accessing this meta data so it makes sense to speed it up. while in linux even the ls fucking does give you meta data you have to add the extra options so it doesnt makes sense to speed up and waste storage on something that is infrequent

seem like both ways are sound

</comment></comment></comment></comment><comment><USER14> This is interesting, and to some extent, expected. I'd expect that emulating one OS on top of another is going to have performance challenges and constraints in general.

But the deep dive into aspects of Windows and Linux I/O reminded me that I'd love to see a new generation of clean sheet operating systems. Not another Unix-like OS. Not Windows. Something actually new and awesome. It's been a long time since Unix/BSD, Linux, and Windows NT/XP were introduced.

A few years ago, Microsoft developed a new operating system called Midori, but sadly they killed it. MS, Apple, and Google are each sitting on Carl Sagan money – billions and billions in cash. Would it hurt MS to spend a billion to build an awesome, clean-sheet OS? They could still support and update Windows 10 for as many years as they deemed optimal for their business, while also offering the new OS.

Would it cost more than a billion dollars to assemble an elite team of a few hundred people to build a new OS? Would Apple, Microsoft, or Google notice the billion dollar cost? Or even two billion?

If you think there's no point in a new OS, oh I think there's a lot of room for improvement right now. For one thing, we really ought to have Instant Computing in 2018. Just about everything we do on a computer should be instant, like 200 ms, maybe 100 ms. Opening an application and having it be fully ready for further action should be instant. Everything we do in an application should be instant, except for things like video transcoding or compressing a 1 GiB folder. OSes today are way, way too slow, which comes back to the file access performance issue on Windows. Even a Mac using a PCIe SSD fails to be instant for all sorts of tasks. They're all too damn slow.

We also need a fundamentally new security model. There's no way data should be leaving a user's computer as freely and opaquely as is the case now with all consumer OSes. Users should have much more control and insight into data leaving their machine. A good OS should also differentiate actual human users from software – the user model on nix is inadequate. Computers should be able to know when an action or authorization was physically committed by a human. That's just basic, and we don't have it. And I'm just scratching the surface of how much better security could be on general purpose OSes. There's so much more we could do.

<comment><USER15> Google is doing this, very publicly, with Fuchsia. Brand new kernel, not even POSIX compliant.

Microsoft is also doing this, in a different and substantially more expensive way [1]. Over the past several years they've been rewriting and unifying their disparate operating systems (Windows, Phone (before the fall), Xbox, etc) into a single modular kernel they're calling OneCore. Its more than likely that this work is based off of, if not totally contains, much of the NT kernel, but its the same line of thinking.

There is one massive rule when it comes to engineering management we see repeated over and over, yet no one listens: Do Not Rewrite. Period.

Apple is exemplary in this. We don't know how many changes they've made to iOS since its fork from MacOS long ago, which was based on BSD even longer ago. But have you used an iPad in recent history? Instant app starts. No lag. No- stutter rendering at 120fps. When HFS started giving them issues, they swapped it out with APFS. Apps are sandboxed completely from one-another, and have no way to break their sandbox even if the user wants them to. Etc. Comparing an iPad Pro's performance to most brand new Windows laptops is like fighting a low-orbit laser cannon with a civil war era musket. They've succeeded, however they managed to do that.

Point being, you don't rewrite. You learn, you adapt, and you iterate. We'll get there.

(And if you've read all this and then wondered "but isn't Fucshia a rewrite" you'd be right, and we should all have serious concerns about that OS ever seeing the light of day on a real product, and its quality once that happens. It won't be good. They can't even release a _passable_ ChromeOS device [2])

[1] [https://www.windowscentral.com/understanding-windows-core- os...](https://www.windowscentral.com/understanding-windows-core-os-and- polaris)

[2] [https://www.youtube.com/watch?v=HOh6d_r63Bw](https://www.youtube.com/watch?v=HOh6d_r63Bw)

<comment><USER16> onecore isn't really about the kernel, but the intermediate layers above it.

</comment></comment></comment><comment><USER17> > The NT file system API is designed around handles, not paths. Almost any > operation requires opening the file first, which can be expensive. Even > things that on the Win32 level seem to be a single call (e.g. DeleteFile) > actually open and close the file under the hood. One of our biggest > performance optimizations for DrvFs which we did several releases ago was > the introduction of a new API that allows us to query file information > without having to open it first.

Ouch that sounds painful... Is this why deleting gigs worth of files takes a bit? I could of sworn it's not a huge difference on Linux, at least when using the GUI, maybe when doing straight rm it's quicker.

<comment><USER18> Reminds me of a performance optimization I did at work. A previous developer had implemented a routine to clean up old files. The routine would enumerate all the files in a directory, and then ask for the file age, and if old enough delete the file.

The problem was that asking the file age given a path caused an open/close, as GetFileSizeEx expects a handle.

Now, at least on Windows, enumerating a directory gets[1] you not just the filename, but a record containing filename, attributes, size, creation and access timestamps. So all I had to do was simply merge the directory enumeration and age checking.

The result was several orders of magnitudes faster, especially if the directory was on a network share.

[1]: [https://docs.microsoft.com/en- us/windows/desktop/api/minwinb...](https://docs.microsoft.com/en- us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataw)

<comment><USER19> POSIX stuff is terrible for this sort of thing, but luckily it's often a straightforward fix once you know to look for it. Here's a similar fix for the old Win32 version of the silver searcher: [https://github.com/kjk/the_silver_searcher/pull/7](https://github.com/kjk/the_silver_searcher/pull/7)

Looks like the active Windows port ([https://github.com/k-takata/the_silver_searcher- win32](https://github.com/k-takata/the_silver_searcher-win32)) doesn't have this change, but it's possible Mingw32 or whatever exposes this flag itself now (as it probably should have done originally).

</comment></comment></comment><comment><USER20> Thanks for sharing, that was an interesting read. I know the IO performance has always been the main gripe with WSL.

It makes me think more broadly about some of the trade offs with the discussions that happen on Github Issues.

It's great that insights like this get pulled out in the discussions, and this could serve as excellent documentation. However, the discoverability will be difficult and it always takes some weeding through the low quality comments to piece the insights from contributors together.

I wonder how Github (and Microsoft) could better handle this. They could allow for flagging in-depth comments like this into a pinned section and they could be updated collaboratively in the future (Wiki?).

It also feels like a reputation system could help to motivate healthier discussions and could bury low quality "me too" comments and gripes. It's not so bad in the linked example but I often encounter many rude comments aimed against volunteer OSS developers.

<comment><USER21> This particular post is pretty famous if you've been following the development of WSL. It's constantly linked to and referenced from other GitHub issues regarding WSL performance. So I think GitHub's current system is succeeding in that regard, although there are so many good points raised here that I wish it could get turned into a standalone blog post.

</comment></comment><comment><USER22> I can't see MFT contention mentioned once. That's what absolutely and totally destroys small file write performance. This affects source operations, WSL, compilers, file storage, everything.

And that's so architecturally tied to the guts of NT you can't fix it without pushing a new NTFS revision out. Which is risky and expensive.

Which is incidentally why no one at Microsoft even seems to mention it I suspect and just chips at trivial issues around the edges.

Bad show. NTFS is fundamentally broken. Go fix it.

Edit: my experience comes from nearly two decades of trying to squeeze the last bit of juice out of windows unsuccessfully. My conclusion is don't bother. Ext4, ZFS and APFS are at least an order of magnitude more productive and this is a measurable gain.

<comment><USER23> Perhaps we didn't read the same article. What it says that the root of problem is the Windows IO subsystem architecture. Change NTFS for anything and you will get the same problem.

<comment><USER22> But that's not the case. The root cause is the MFT and NTFS architecture. People fail to mention that because the problem is harder to fix. It's almost that there is a "do not speak bad of NTFS" going on.

You can demonstrate this by using a third party file system driver for NT. when NTFS on its own is eliminated the performance is much much better. This is a neat little differential analysis which is conclusive. I can't remember the product I used when I evaluated this about 8 years ago unfortunately.

</comment></comment></comment><comment><USER24> I think this is a very good example of how windows is different in its goals and designs from Linux. I have a feeling this is the reason Linux has had a hard time catching on, on the desktop. Its easy to complain about a slow filesystem, but Microsoft lives in a different world, where other priorities exist. For someone building a server running a database serving loads of people Linux is a no brainer. You can pick the parts you want, shrink wrap it and fire it up without any fat. On a desktop machine, you want to be able to update drivers in the background without rebooting, you want virus scanners, and you want to have driver ready the moment the user plug's in a new device. Both Windows and Linux is for the most part very well engineered, but with very different priorities.

<comment><USER25> I'm very confused by your post. You start off talking about desktop machines but NT was actually engineered for servers and then later ported to the desktop. You then describe a bunch of features Linux does better than Windows (eg updating drivers without a reboot).

I think a more reasonable argument is to make is just that Windows is engineered differently to Linux. There's definitely advantages and disadvantages to each approach but ultimately it's a question of personal preference.

<comment><USER26> NT was architected to handle high-end workstations from day one — there's a reason why running the GUI was mandatory even when the resource costs were fairly substantial.

Check out e.g. [https://en.wikipedia.org/wiki/Windows_NT_3.1](https://en.wikipedia.org/wiki/Windows_NT_3.1) for the history of that era. The big selling point was that your business could code against one API everywhere, rather than having DOS PCs and expensive Unix, VAX, etc. hardware which was completely different and only a few people on staff were comfortable with.

<comment><USER25> OS/2 was a high end desktop OS, but NT diverged a little and took some heavy design principles from VMS (hence it's name, WNT) and was thusly pivoted towards back office systems rather than desktop usage.

At that time Microsoft's server offering was a UNIX platform, Xenix, but it was becoming clear that there needed to be a platform to serve workstations that wasn't a full blown mainframe. So Microsoft handed Xenix to SCO to focus on their collaboration with IBM so the intent there was always to build something more than just high end workstation. And Given it was intended to be administrated by people who were Windows users rather than UNIX grey beards (like myself) it clearly made sense to make the GUI a first class citizen; but that doesn't mean it was sold to be a desktop OS.

<comment><USER26> My point was that it is misleading to say it was billed as a server OS when all of their messaging was that it was both — maybe not as far down as low-end desktops but they were very clear that any serious work could be done on NT, going after the higher end PC and lower end workstation business.

<comment><USER25> In that era workstations weren't the same things as desktops. They were an entirely different class of computers and often workstations just ran server OSs with a nicer UI (Next, SGI, etc). So you're point about workstations doesn't invalidate what I was saying about NT not originally targeting desktops.

</comment></comment></comment></comment></comment></comment><comment><USER20> They mention that file performance decreases with the numbers of filters that are attached to the NTFS drive. Is there a way to list the filters to determine which ones (and how many) are applied on your system?

<comment><USER27> I had the same question. Apparently there are a couple of commands to look at:

      fltmc filters

That shows the filters loaded, and presumably the ones with "num instances" of 0 aren't actually in use on any volumes.

You can figure out what each of the filters is by looking at the output of:

      sc query type=driver

To figure out what the ones I saw in fltmc were, I used this:

      sc query type=driver | grep -A1 -i -e cldflt -e wcifs -e storqos -e filecrypt -e luafv -e npsvctrig -e wof -e fileinfo

</comment></comment><comment><USER28> Interesting this article never said "poorly architected". The conclusion that the issue is peanut buttered points at that. Instead of looking into the system for things to optimize is there any proposal or initiative to rework it at a higher level?

<comment><USER29> Proposal from an earlier comment:

> Noting, as an aside, that it isn't really all that necessary for MSFT to > work on the project, because I gather there are at least 684 FOSS NT kernel > developers available, and qualified, and willing, to volunteer their time to > work on projects like that. I assume that's why all those people upvoted, > anyway. With a team that size, stabilizing WinBtrfs will take no time at > all.

</comment></comment><comment><USER30> On similar lines, one of the usual gripe with windows is the horrible file copy estimates, Raymond Chen wrote an article on it to explain why it is[1].

[1]: [https://blogs.msdn.microsoft.com/oldnewthing/20040106-00/?p=...](https://blogs.msdn.microsoft.com/oldnewthing/20040106-00/?p=41193/)

<comment><USER31> The Old New Thing is a fantastic blog especially if you develop in Windows. I used to read it religiously until 5 years back and stopped reading about time when Google Reader was retired and somehow didn't setup in my new flow of reading blogs. Thanks for reminding me about this blog and article again.

</comment></comment><comment><USER32> At least windows doesn't freeze your whole desktop under heavy IO.

Edit: I'm getting downvoted by people that never used Linux probably.

<comment><USER33> You're being downvoted, but it's true about linux for at least two reasons to this day:

1\. dm-crypt threads are unfair to the rest of the system's processes [1]. On dmcrypt systems, regular user processes can effectively raise their process scheduling priority in a multithreaded fashion by generating heavy IO on dmcrypt storage.

2\. Under memory pressure, the VM system in linux will enter a thrashing state even when there is no swap configured at all. I don't have a reference on hand, but it's been discussed on lkml multiple times without solution. I suspect the recent PSI changes are intended as a step towards a solution though. What happens is clean, file-backed pages for things like shared libraries and executable programs become a thrashing set resembling anonymous memory swapping under memory pressure. As various processes get scheduled, they access pages which were recently discarded from the page cache as evictable due to their clean file-backed status when other processes ran under pressure, and now must be read back in from the backing store. This ping- ponging continues dragging everything down until either an OOM occurs or pressure is otherwise relieved. This often manifests as a pausing/freezing desktop with the disk activity light blazing, and it's only made worse by the aforementioned dmcrypt problem if these files reside on such volumes.

[1] [https://bugzilla.kernel.org/show_bug.cgi?id=199857](https://bugzilla.kernel.org/show_bug.cgi?id=199857)

<comment><USER34> This behaviour - and perhaps other causes with similar issues for desktop users, is what drove me away from helping to make Linux 'ready for the desktop'. The kernel philosophy was incompatible with the needs of desktop users. Those developing for the desktop (like myself) didn't have the required expertise to make the kernel do the Right a Thing, and couldn't find enough people willing or able to help.

Things may have changed over the years - I've been running a Linux desktop recently and haven't seen this kind of issue yet (the kind where you need to use magic keys to ask the kernel to kill all, sync and reboot) but reading your post, perhaps this is because RAM is much more plentiful these days.

<comment><USER35> Its probably the ram plentiful thing. I haven't looked recently into if the Arch mainline kernel kconfig is just bad or not but the oomkiller is trash for me. Used to have the "recommended" swap == ram size but then the memory manager never even tried to cull pages until it was OOM and froze up trying to swap constantly. Currently running a 16/4 spread and probably going to drop to 16/1 because any time I hit memory limits everything just freezes permanently rather than the oomkiller getting invoked. I've hit it twice this week trying to render in Kdenlive and run a debug build of Krita...

</comment></comment></comment></comment><comment><USER36> The issue seems to be with how Windows handles file system operations. They allow filters to operate over each request. These filters are like hardware drivers in that they are created and maintained by third parties. So, MS has no real ability to change how things work because they don't have absolute control in the same way that Linux does over the operations (Linux device drivers are part of the kernel)

</comment><comment><USER37> Not sure if I'm being naive, but couldn't they make it so that if there are no filters present on a given volume, then the entire filter stack is bypassed and the directory nodes are served from a cache managed by the file system at the root of the volume? That way developers who really want performance can make sure they have no filter drivers installed on that volume.

<comment><USER7> If they really wanted to, they could mount an ext4 fs as a single blob on disk directly into WSL. That won't really help if you want to run a GUI editor in windows against that identical directory though.

<comment><USER37> Any idea why they haven't responded to people's requests for FUSE? It's the second-most requested feature and should enable applications like this.

<comment><USER38> They have: [https://docs.microsoft.com/en- us/windows/desktop/projfs/proj...](https://docs.microsoft.com/en- us/windows/desktop/projfs/projected-file-system)

<comment><USER37> That looks awesome (thanks for sharing) but it seems to be a different thing? People are looking for a way to run existing Linux FUSE in SL, not develop new virtual file system implementations. They haven't responded to that request at all. [https://wpdev.uservoice.com/forums/266908-command-prompt- con...](https://wpdev.uservoice.com/forums/266908-command-prompt-console- windows-subsystem-for-l/suggestions/13522845-add-fuse-filesystem-in-userspace- support-in-wsl)

<comment><USER39> Windows expects different things from an FS, so it makes sense for a native userspace FS API to be different from FUSE.

But once you have it, it shouldn't be difficult to write a FUSE adapter on top, mapping across those differences as best as possible.

</comment></comment></comment></comment></comment></comment><comment><USER40> NTOS (Windows NT's kernel) was originally designed to be backward compatible with Windows (DOS era), OS/2 and POSIX. Designing such a kernel was considered a performance at the time but probably cost its fair share of bloat that kept growing with the years. Also, it's not surprising that Linux is optimized for operating on files since the UNIX philosophy is about considering everything as a file, something that Dave Cutler (NTOS main designer) was known for criticizing[1].

 _I pray daily that more of my fellow-programmers may find the means of freeing themselves from the curse of compatibility._ (Dijkstra)

[1] [https://en.wikipedia.org/wiki/Dave_Cutler#Attitude_towards_U...](https://en.wikipedia.org/wiki/Dave_Cutler#Attitude_towards_Unix)

</comment><comment><USER41> As another data point here: I had to add a TKinter-based loading screen to a PyQt5 app I wrote for work because the app - which takes half a second to start up on Linux - takes nearly a minute on Windows the first time around (and multiple dozens of seconds on subsequent runs) and I know firsthand that my end-users are unlikely to wait that long unless they can see something loading. I suspect it has to do with the sheer number of file accesses for each of the Python libraries and underlying DLLs and such.

</comment><comment><USER42> > A Win32 path like C:\dir\file gets translated to an NT path like > \??\C:\dir\file, where \??\C: is a symlink in Object Manager to a device > object like \Device\HarddiskVolume4

Cool! Can the "NT paths" be used directly on Windows? As far as I know the ordinary Win32/NTFS system doesn't even have symlinks and this feels quite a handicap.

<comment><USER43> Windows does have symlinks and file junctions. Not sure how these compare to other file systems.

<comment><USER44> These require user-mode round trips for path traversal, so comparable to FUSE, I believe.

So it is relatively easy to add hooks of your own that get called as if they were file reads; NTFS calls these "Reparse Points". Linux would do this with named pipes.

I am just a user of these things, haven't dug into any implementation details recently, but I guess that the stacks to support these features in Linux and Windows each have their cache etc design decisions that have led to current state of filesystem performance under typical use-cases these days.

</comment></comment></comment><comment><USER45> I still scracth my head as to why doing a kernel update of Ubuntu running under Hyper-V on a spinning disk is so horrifically slow. If I migrate the VM while it's running to SSD, let it finish, then migrate it back to spinning, it's faster then just letting it update in place. This is my device desktop, otherwise I would put in on SSD full time.

The above comments make me think something like the stat calls may be the issue and moving the running vm to SSD hides the problem. It obviously isn't raw disk rate at the point.

<comment><USER46> Is the Ubuntu VM's / on a fixed or dynamic VHD? The former provides (modulo filesystem fragmentation) linear addressing of virtual LBAs to physical LBAs, and the latter can be heavily fragmented and result in sequential read/write operations becoming random access, which on a HDD kills performance.

My advice for anyone running VMs is if they're on HDDs or they're highly tuned for disk usage (databases for example), use fixed VHDs, otherwise use dynamic.

<comment><USER45> Thanks for the suggestion. The disk is a dynamic VHDX, migrated it to fixed vhdx and will experiment.

</comment></comment></comment><comment><USER47> The build speed difference for Android (Gradle build system) between Windows and Linux is extremely noticeable especially for large projects, where you can see even almost 50% faster builds.

</comment><comment><USER48> Wouldn't holding project files in an ext partition fix this? Or is that not supported yet?

<comment><USER49> Use ReactOS driver if that works. If not, file a bug report on [https://jira.reactos.org](https://jira.reactos.org).

</comment></comment><comment><USER50> The entire post negates the first statement that it isn't easy to just say "NTFS is slow".

</comment><comment><USER51> I would love a QT-esque rust library that utilizes components and maybe even scss or css for styling

</comment><comment><USER52> tldr: discussion is about why disk access under WSL is slower than under Linux, mostly due to the different design constraints of Linux vs Windows for file systems.

</comment><comment><USER53> An interesting comment from insider. We all knows from various benchmarks that Microsoft Windows' filesystem access performance was way too worse than Linux kernel not only WSL but also Win32 Subsystem too.

Also, process creating performance is worse on Windows. I wonder if it is also the case of "Death by thousand cuts"

</comment><comment><USER54> Windows performance is abysmal. Instead of beating around the bush, they should just state that it is the combination of everything that makes Windows dog slow compared to either Mac or Linux. Someone said it on that thread, but Windows really should be a DE on Linux now instead of being its own OS.

</comment><comment><USER55> Perhaps this explains why Yarn/NPM was slow on WSL too?

</comment><comment><USER56> dyt</comment>


Taxify is entering the e-scooter game - <AUTHOR> https://techcrunch.com/2018/09/05/taxify-is-entering-the-e-scooter-game/ <comment><USER2> This is definitely a time when I'm annoyed to be a New Yorker -- we're shut out of all of these developments. We committed to Citibike (provided by Motivate), and now we're stuck trying to protect the granted monopoly by shutting out all the dockless e-bikes and electric scooters in favor of the overpriced incumbent.

<comment><USER3> How come Citibike stops New York from having dockless alternatives? DC has the Capital Bikeshare docked bike system (also by Motivate), but still has rentable dockless bikes and electric scooters.

</comment></comment><comment><USER4> I am looking forward to watch how this develops. I think small electric vehicles have a huge future to reduce traffic congestions and pollution. With small electric vehicles, I think of all new mobility enabled by the progress with battery technogoly, ranging from e-Bikes, Segways, e-Scooters to whatever else might be invented. E-Scooters look like great devices for the typical short distances in urban regions.

</comment><comment><USER5> I am really excited to see whether this business model is sustainable or not.

I have found it interesting that some of my left-leaning friends oppose these scooters on the grounds of them being a public nuisance. For anyone who wants to curb global warming, these scooters are a darn good way to do it. The tradeoffs are easily worth it. Some people want to act like the tradeoffs don't exist/ if they just wish for something hard enough, the solution that has no tradeoffs will appear, despite institutional inertia.

<comment><USER6> I have to say I think the impact of scooters on global warming will be nil if not negative.

Those little stand-up electric scooters mostly substitute for walking, not driving. And in that sense they are worse for global warming because they actually use electricity, in many places generated by coal.

And consider the warming impact of making the things. Metal forging, paint, tires, batteries, electronics.

<comment><USER7> Agreed, scooters (and skateboards) replace walking, not biking or driving.

IMO, they're also an Attractive Nuisance, in the legal sense of the term. They encourage people to ride them who are not adequately trained or equipped, by virtue of their stunningly low price and easy availability. Then those people are much more likely to hurt themselves or someone else, thus driving up trips to the ER and local healthcare costs.

The old method of drug dealers giving away the "first hit for free" seems to be very apropos here.

If the scooter companies were required to provide health and liability insurance for every rider, and get a hefty fine every time one of their riders was seen using the sidewalk and/or not wearing a helmet, at least those costs would not be externalized on society.

The original Segway device had large wheels that were set horizontally, and incorporated software and hardware to make them as stable as possible. We've thrown out all of those advantages in the name of chasing a "cheaper" device.

Disclaimer: I am currently recovering from my own accident from riding a scooter, and so I may be a bit biased. Or maybe That gives me a unique insight that many others in this discussion do not. You decide.

<comment><USER8> > IMO, they're also an Attractive Nuisance, in the legal sense of the term. > They encourage people to ride them who are not adequately trained or > equipped, by virtue of their stunningly low price and easy availability.

That's...not the legal sense of "attractive nuisance", which refers to an object on land likely to attract children which makes the landowner legally responsible for injuries by the object to trespassing children so attracted in circumstances in which they otherwise would not be, provided the children are unable to understand the hazard posed.

At best, you are referring to a very loose analogy to the legal sense of the term.

> Then those people are much more likely to hurt themselves or someone else, > thus driving up trips to the ER and local healthcare costs.

I understand the intuitive attractiveness of this, but is there any empirical evidence for it?

</comment></comment></comment></comment><comment><USER9> I've been using the local Electric Moped rental to get around my large metropolitan city, and I have to say it is really delightful to use and experience. I have all the best parts of having a moped to use, without any of the ownership issues. Of course, it helps that the provider has deployed thousands of the things .. but with every ride I'm ever more convinced this is the future of transportation. Easy to use electric rentals, just great ..

</comment><comment><USER10> Even if the scooter craze crashes and burns (either due to regulations, insustainable business model, or lack of sustained customer demand aka here comes winter) it's gotta be helping drive down prices to manufacture and improving electric scooters and bikes technology. Scooter rental isn't super appealing for my use case, but buying one to use for commuting now is much more attainable than even 5 years ago.

<comment><USER11> I know a person who works on Bird's freight team, they apparently have been moving 2 full Boeing 747s of scooters (I estimate that to be about 12,000-14,000 based on weight) every day from China, at one point about $150 a pop). I think it's a sustainable model because after being shipped, delivered, and released (estimating about $80 more per scooter), it's ridden until dead every day on average 10 times (1.43mi/ride average, range 15mi average), earning it $10 plus $0.15/min, or ~$23.50/day. It breaks even after 7 rides, and they have at least 20 rides in them before they're toast.

I haven't factored in other parts of the economy, like oversupply, theft, premature damage, and payroll for the employees including chargers, but seeing they're in 100 cities with at least 3 million scooters on the streets being ride. I also based my guesses from [https://www.bird.co/blog/birdyearone](https://www.bird.co/blog/birdyearone).

<comment><USER12> > and they have at least 20 rides in them before they're toast.

are you saying the scooters electric part dies after 20 rides?

<comment><USER13> I think kawfey meant that in a given day, each scooter can be ridden 20 times before the battery is depleted. I don't think this was a description of the lifetime of the battery — just its daily capacity.

</comment></comment></comment></comment><comment><USER14> I know it's a combination of 'taxi' and '-ify', but it reads too much like 'tax' and '-ify'. Taxes generally have a negative or necessary evil connotation which doesn't seem like a great company name. It's a good thing the scooters are not slated to go to the US, where 'taxes' are a four-letter word, or they might end up in the Boston harbor.

<comment><USER15> Exactly my first inclination reading the headline. Why is a tax company entering the e-scooter game? Unfortunate naming.

I'm guessing they'd like everyone to pronounce them as taksēfi, not taksifi

<comment><USER16> As the article mentioned they aren't a new company, they are the #1 ride hailing app in a lot of European cities.

<comment><USER17> In which cities is it #1?

<comment><USER18> Taxify is huge (read: bigger than Uber) in the Baltics (Lithuania, Latvia, Estonia) and in some African countries (Kenya, Nigeria, South Africa). It mostly focuses on Eastern European, Western Asian and African markets, where there is no single major player.</comment></comment></comment></comment></comment>


Ask HN: What is your plan for life? - <AUTHOR> I recently entered the 30's and have been grappling with this question. I have steady job as software engineer, make decent money. And while its not over the top, I am satisfied with what I have. Maybe you change jobs for higher salary/better opportunity and rinse-repeat. But is that it? It seems pretty pointless inspite of the comfortable lifestyle that comes with it. How do you go about trying to solve this question of coming up with a plan for the long-term.<p>Anybody else feel the same way? I would appreciate some wisdom from the folks here. <comment><USER2> My function is to probe for biological infestations, and destroy that which is not perfect.</comment>


Today Show January 1994...What is the Internet? - <AUTHOR> http://marquee.blogs.cnn.com/2011/01/31/today-flashback-katie-couric-whats-an-internet/?hpt=C2

<comment><USER2> Submitted lots of times. Here are a few:

<http://news.ycombinator.com/item?id=2156163>

<http://news.ycombinator.com/item?id=2157322>

<http://news.ycombinator.com/item?id=2159550>

<http://news.ycombinator.com/item?id=2161867>

It appears <http://searchyc.com> is broken. That's a shame - the search link at the bottom of the page is complete crap, and SearchYC was brilliant. It appears to have been broken for a few days now - I sure hope it gets fixed soon. 8-(</comment>


Ask HN: How do you manage your contacts, a social CRM for hackers? - <AUTHOR>

I've become overwhelmed with contacts and networks from conferences, happy hours, etc. What do other hackers use to manage this and work relationships? <comment><USER2> I would look through the "CRM" results on SearchYC - <http://searchyc.com/crm></comment>