Research: Cubicles Are the Absolute Worst - <AUTHOR> http://blogs.hbr.org/2013/11/research-cubicles-are-the-absolute-worst/ <comment><USER2> Unsurprisingly, private offices score the best, by a huge margin. Right now, I've got a huge office to myself (separate from a two-person office next to me by an open passageway). It's super quiet because there are bookshelves full of books to absorb any noise, as well as thick 1970-era carpeting. It's the most productive place I've ever worked. I have no idea why tech companies would pay engineers gobs of money,[1] spend gobs of money on huge office campuses,[2] then inflict open plan or cubicles on said engineers.

[1] Office space is expensive, but not that expensive relative to an engineer's salary. The going rate for class A space in Manhattan is about $70/square foot per year. That puts a 10x10 office (assuming 85% usable space) at about $8,000 per year + build-out + maintenance.

[2] Apple's new spaceship building (in the middle of a faceless suburb) will cost $5 billion and have 2.8 million square feet of space. One World Trade Center (in downtown Manhattan) will cost $3.9 billion and have over 3 million square feet of class A office space. A lower-profile project, the New York Times building in Midtown West, was constructed for $850 million and has 1.5 million square feet.

Apparently Google spent almost $2 billion on a squat 18-story structure in Manhattan with an over-abundance of depressing window-less interior spaces... I'm going to assume it was the difficulty of getting 2.9 million square feet in one place rather than just bad taste.

EDIT: I'm not saying Apple's offices are open plan. I have no idea what Apple's setup is. I'm pointing out that companies are certainly willing to spend a lot of money on these big suburban office parks, multiples of what it would cost to just buy a couple of skyscrapers in SF. Thus, cost does not seem to be the motivating factor (except maybe in a penny-wise pound-foolish sort of way).

<comment><USER3>
        > Apple's new spaceship building (in the middle of a faceless suburb)
        > will cost $5 billion and have 2.8 million square feet of space

… that no employee below VP level can afford to live near. It's OK, though; Apple doesn't have to pay them for the tenth of their lives they waste commuting.

And above the entrance these words appear: "My name is Jobs, CEO of CEOs: Look on my works, ye Mighty, and despair."

<comment><USER4> They can absolutely afford to live near it. Based on my own anecdotal experience at least, the people who work for the big tech companies in the South Bay with the long commutes are generally the ones who choose to have long commutes so they can work in the South Bay but live in SF. If affordability were their concern, they could save a ton of money by just living nearby in Sunnyvale or Campbell or wherever.

I also know people who work for those same companies who have long commutes for affordability reasons, but they seem to be the exceptions rather than the rule. Even in their case, it's usually for reasons other than there's just no way they can afford to live in the South Bay. More often, it's because they are determined to have a really big house with a really big yard and are unwilling to concede on that (such a thing is quite a luxury in the South Bay). Even then, they're accepting the commute for because they want to, not because they have to. It really sucks that housing is that ridiculous in the Bay Area, but it's not like any of these huge companies are going to pick up and leave and build their giant new campus out in the middle of the desert or something.

<comment><USER3>
      > not like any of these huge companies are going to pick up and leave and
      > build their giant new campus out in the middle of the desert or something.

Or something.

Typically a programmer's daily work product can be moved half way around the world in a fraction of a second, for a fraction of a cent.

Perhaps there should be an addition to _Latency numbers every programmer should know_ :

      Programmer drives to work .... 3,000,000,000,000 ns

</comment></comment></comment></comment><comment><USER5> Anyone who has read Christopher Alexander's "A Pattern Language"[1] can easily extrapolate his ideas to cubicles. Alexander pointed out that if you drop any human in an open field with a tree, within a few minutes they'll be sitting with their back to the tree, facing the sun.

We are animals. We get physically and psychologically uncomfortable when our vision is restricted and our backs are exposed. It means we are vulnerable to predators. As such, cubicles are pretty much a nightmare.

[1] Christopher Alexander wrote about architecture, but his terminology was adopted by the design patterns movement in computer science, so it's familiar to most programmers. It's one of two building architecture books I recommend to programmers - the other is Stewart Brand's "How Buildings Learn".

<comment><USER6> Why would you want to _face_ the sun? Wouldn't that blind you? I'd think it'd be better to sit with your back to the tree facing away from the sun.

<comment><USER7> Probably depends on whether you are in Minnesota, trying to get warmth, or in Phoenix trying to stay in the shade...

<comment><USER5> I'm a Minnesotan, so...

</comment></comment></comment></comment><comment><USER8> This fascinates me. I find open-plan offices really hard to work in. Meanwhile—perhaps surprisingly—my favorite places to work are coffee houses or college libraries. I'm surrounded by strangers, but their anonymous presence starves off the feelings of loneliness that I can get working from home.

I think the difference between a public place and an office is that it's really unlikely for any of those strangers outside of an office to interrupt your work. In an open office, every conversation and set of footsteps feels like a potential disruption.

<comment><USER6> > I think the difference between a public place and an office is that it's > really unlikely for any of those strangers outside of an office to interrupt > your work.

Yes, I think this is the difference. The noise around you becomes background/white noise.

But honestly, I don't know how you can work in these areas. Doesn't it prevent you from making phone and conference calls? Assuming yes, maybe that's another reason you can become more productive.

<comment><USER9> I'd agree. Back when I was working on campus (now, mercifully, purely remotely), I'd sometimes head off to the main coffee joint instead of the completely open-plan office. Whilst it was hardly any quieter, it somehow worked much better for me, probably just as you describe.

For my part, I avoid phones anyway - which seems more commonplace than I'd imagine, amongst other technically-minded sorts.

</comment></comment></comment><comment><AUTHOR> I worked in a company that changed their old, legacy office block for a brand new open plan one. Everyone was out in the open, and though there was an obvious hierarchy of seating, most of the desks were unassigned and changed ownership each day. The floors themselves opened out into a huge open space, and all the meeting rooms had glass sides.

I have to say I wasn't a fan. There was a lot of background noise, and it was very difficult to have a private conversation. I constantly felt like someone might look over my shoulder (a problem if dealing with sensitive documents), or interrupt work I'd struggled to get focussed into. It was also hard to have private conversations about sensitive topics without having to search for a space away from everyone's desk. Previously we'd just talk about stuff without moving.

My biggest frustration, though, was the fact it was very hard to be anything other than corporately bland in our attitudes. When we were split into floors and rooms, it was much easier to laugh and joke, and I often saw people bring something in to announce someone's birthday and make a fuss of them.

After going open-plan, it seemed the only way to celebrate anything was to interrupt the entire office, which put a large dampener on it.

There's also the issue that if you tend to be introverted, open-plan offices can be exhausting.

</comment><comment><USER10> Remember that what we're asking folks is to self-report on what they like or not.

This may sound either pedantic or highly-controversial, but what people like and what might be best for the work they are doing are two different things. We do a great disservice to both to confuse the two.

I would like to have a great big office. Better still, I'd like a cabana at the beach, a laptop, and a hammock. What's best for my team or the project I'm on? Different things entirely.

What disturbs me is this idea we see repeated over and over again that _if I like it, it must be good_. No, that's not true at all. Going to medical school and having a brutal internship are not things you like, but they are things that take you somewhere you want to go. Life is full of things that are unpleasant yet work out for some greater good. We cannot blithely assume that we can follow our instincts on what feels good with every project we engage in. It doesn't work that way.

This may turn out to be one of those things. Or maybe we get our cake and eat it too: what feels good is what's best. But that determination has not been made, and this study doesn't advance the conversation along these lines at all.

<comment><USER11> We could take an anecdote from Richard Hamming's talk "You and Your Research"(+) - speculation on why some scientists do great work and go on to win Nobel prizes, and others don't, even if they are also clever and hard working. It includes this paragraph:

 _Another trait, it took me a while to notice. I noticed the following facts about people who work with the door open or the door closed. I notice that if you have the door to your office closed, you get more work done today and tomorrow, and you are more productive than most. But 10 years later somehow you don 't know quite know what problems are worth working on; all the hard work you do is sort of tangential in importance. He who works with the door open gets all kinds of interruptions, but he also occasionally gets clues as to what the world is and what might be important. Now I cannot prove the cause and effect sequence because you might say, ``The closed door is symbolic of a closed mind.'' I don't know. But I can say there is a pretty good correlation between those who work with the doors open and those who ultimately do important things, although people who work with doors closed often work harder. Somehow they seem to work on slightly the wrong thing - not much, but enough that they miss fame._

It might be similar with open plan offices - less pleasant and more difficult to concentrate in today and tomorrow, but resulting in better, more competitive, more coherent software in twelve months.

(+) [http://www.cs.virginia.edu/~robins/YouAndYourResearch.html](http://www.cs.virginia.edu/~robins/YouAndYourResearch.html)

<comment><USER10> I coach teams to perform better, so this topic is a bit of a sore point for me. I think Hamnming was on to something.

I've worked in about every possible configuration, and I've seen teams work in about every possible configuration. In addition, I've coded in all of these environments.

After working from a nice, quiet home office for many years, I'm trying out coworking. When I'm not with clients I drive an hour to an office to work with random people.

Why would I do this? Don't I value my time? Sure thing. But I find that the hassle and pain of being interrupted actually helps me to a reset to think about whether what I'm doing or not is important. Without that reset, I'll just grab on to some problem and keep tweaking it. I'm like that -- and I suspect many others are like that too. We desire uninterrupted time because we desire a deep problem to dive down in and forget about everything else. And sure thing, there are problems like that.

But 99% of the time problems are not like that, and we hurt ourselves more long-term than we help.

All of this is just conjecture, mind you. But this is an area where I see the natural inclinations of technology people diverge for what looks better for the effort as a whole. It's non-intuitive and uncomfortable. But that's the way life is, right? Dang humans.

</comment></comment></comment><comment><USER12> I like cubicles and would prefer to be in my own box than in an open space concept room. Cubicles reduce noise. Respects my privacy, and puts up barrier against people distracting me.

I wish more startups had cubicles.

<comment><USER13> Same here. Cubicles with walls high enough that I don't constantly see everyone and vice-versa work pretty well for me.

</comment></comment><comment><USER14> Methinks "open offices" score better than cubicles on many points precisely because there is _no_ expectation of privacy/quiet/etc. Lacking the expectation of better, there is less dissatisfaction with reality being worse. Cubicles at least give the occupant a semblance, and thus hope for, privacy/quiet/etc. so one is more keenly annoyed that it's not up to par.

<comment><USER15> Agreed. Many people in cubicle farms won't think twice about taking a phone call at their desk. But this is frowned upon in an open office plan, where it is usually expected that you step into the hallway or a phone room.

<comment><USER16> You must have worked in different open plans than I, which resembled more of a giant chatter box.

Problem was mixing different types of work/communication (engineering and sales), and management who did not care about the impact.

</comment></comment></comment><comment><USER17> What's worse is open space workbenches. They make cubicles seem like a luxury. Grrr...

<comment><USER18> Just a room full of picnic tables, let's live the dream.

</comment></comment><comment><USER19> In the past 6 months I've worked in a cubicle, open office space, and in an office of my own, with a proper door. I would say that productivity was lowest in the cubicle, and is highest in the office. Open office space was the most unenjoyable however.

</comment><comment><USER20> The best combination I have seen is a two-floor suite connected by stairs. One floor has project rooms, which are small-ish open plan rooms, holding up to about 10 people, with reconfigurable walls tables and seating. The upstairs has some traditional offices (seemed like for business development and other phone-bound users), conference rooms, and a very quiet, library-like open plan area for individual on-site work.

</comment><comment><USER21> Worst in employee satisfaction. What about productivity? All the stats quoted were surveys, not measures of work done.

<comment><USER22> Haven't read it, but the source I've always heard cited in claims that less distraction leads to real productivity gains (3x) is Peopleware [http://www.amazon.com/gp/product/0321934113/ref=ox_sc_act_ti...](http://www.amazon.com/gp/product/0321934113/ref=ox_sc_act_title_1?ie=UTF8&psc=1&smid=ATVPDKIKX0DER)

</comment></comment><comment><USER23> I keep wondering if there's a market for "co-working" spaces that _don 't_ follow the open-plan style. What would it look like? I know Joel tried to floor-plan the ultimate developer office, has anyone followed up or built on that since?

<comment><USER18> Rent-a-carrel seems like it could at least make a go of it in a high-density coworking market like SF. Heck, it would be cool if a coworking space had various areas with varying degrees of openness.

</comment></comment><comment><USER24> We were previously in a crowded open space where I had like 10 sq feet to myself (open). Now we have a modern cube farm 6x8 and it seems luxurious.

</comment><comment><USER25> Open spaces are interesting.

Some problems get solved really quickly because of them. The number of times the person who knows the solution overhears others having a problem is astounding.

But then there are problems that just cannot be solved due to the level of noise. Especially some collaborative problems, where a problem requires two people to focus on it really carefully. Distractions just from hearing others talking can interrupt lines of thought and beyond a certain point limit mental ability.

<comment> w0rd-driven This is never a positive thing to me. It helps when everyone has the same level of problems but it really sucks when you never need help from others. This is a personal problem with the open office I deal with now. I had a coworker that would make disruptions interesting and light hearted. Now its just me and a junior and his disruptions are everything from eating to talking to himself to having conversations with others at volume level 11. The last is not really his fault when someone else leads that charge but a fidgety person is not a great fit for an open floor office shared among 4 people. A much bigger open plan where that can be dissipated by the distance between others. Right now it just feels like someone is constantly in your ear eating potato chips loudly. I purposefully eat potato chips with my mouth closed and always think about my "audible footprint" but when someone else doesn't it's just so fucking annoying.

</comment></comment><comment><USER26> I currently work in an open office space and I enjoy it. I love being able to ask the analyst across from me how s/he goes about doing something without having to get up and peer over a cubicle wall or walk into an office. Bouncing ideas off people and getting an immediate response is great. I could see it being more distracting than a cubicle or a real office. I've never worked in a place with those so I can't compare.

<comment><USER27> >I love being able to ask the analyst across from me how s/he goes about doing something without having to get up and peer over a cubicle wall or walk into an office.

So now it takes less effort to interrupt another persons work-flow and potentially make them restart a long train of thought. [http://ubuntuone.com/27zU9Q5Tlqkoohp6cO4sF2](http://ubuntuone.com/27zU9Q5Tlqkoohp6cO4sF2)

<comment><USER26> Your cartoon doesn't really pertain to this because telling someone they have an e-mail is zero value added. Me asking my neighbor how to forecast something and saving what could be minutes to hours, despite interrupting a train of thought and setting them back a few seconds, definitely does add value.

<comment><USER27> > Me asking my neighbor how to forecast something and saving what could be > minutes to hours, despite interrupting a train of thought and setting them > back a few seconds, definitely does add value.

Only if either A, your interruption costs them less time then it saves you, or B you believe your time is more valuable than theirs.

I think its a good idea to establish within a workplace, esp. an open seated workplace, a way of broadcasting the price of interrupting you. Sometimes this is informal with headphones as a sign, other times people make DND signs or lights, etc. Its just much easier when everyone has an office- you can shut your door.

</comment></comment></comment></comment><comment><USER28> I don't think you can meaningfully compare open workspaces to cubicles without talking about how densely people are packed. I really like the open plan office at my last job, but that was because people were spread far enough apart. And we had side rooms for taking phone calls, having discussions, etc.

<comment><USER29> This is a very good point.

I've been in an open workspace that had three or four people to a desk and it was a nightmare. Now I work at an open workspace where everyone is spread out and it is much better. The closest person to me is ~2 meters away.

</comment></comment><comment><USER5> The best setup I think I've ever seen was a large room with tiny personal cubicles lining the walls, and islands of open work areas in the center. You could go to your cubelet for phone calls, email, storing your coat, etc, but coding work was done at the islands. Each island consisted of five workstations two on each side and one at one end. Each workstation had two 24" monitors and a wide berth, with two chairs and more available. Pair programming was comfy, and getting four or five people around a single piece of work was easy.

If you were at the islands, you were working and available to be called over. If you were in your private cubicle, you were to be left alone unless it was really important. From total openness to decent privacy in a few steps. That's as good a balance as I've seen.

</comment><comment><USER30> I would like to see something that talks about the efficiency of both approaches - ideally from a controlled test.

The reality is offices are much more enjoyable then cubes. Many years ago I was part of a consulting project that cube-farmed a large organization previously used to offices. Everyone but the senior-most execs were pushed out of offices. It was done under the guise of improved teamwork. I saw lot of theoretical support for this, but never did see empirical evidence. Maybe it exists - I'd like to see it.

</comment><comment><USER31> I was going to suggest that the headline needed editing since the article doesn't seem to support that conclusion. But then saw that HBR actually used that mis-leading headline.

The research seems to only deal with employee preference and not much with performance.

I'm surprised there is still so much disagreement on what works best and even more surprised how popular open plans are. Open plans only work for the very few people who either never need to talk to anyone and/or are comfortable with do-not-disturb headphones on.

</comment><comment><USER32> Weird. I think it was on the Discovery Channel recently ( Past month? So also "recent research") where a study on open-plan offices was mentioned and how workers felt they had no privacy saying cubicles were better.

I think it comes down to the person, why not offer both choices?

By the way that graph near the end woke my inner 80s teenager: [https://www.youtube.com/watch?v=x1sLICo- Cxo](https://www.youtube.com/watch?v=x1sLICo-Cxo)

</comment><comment><USER33> There's also a self selection bias. I'd never subject myself to open plan voluntarily due to the performance hit. I suspect having personal standards probably has a major influence on general attitude.

"They pretend to house us, we pretend to work" type thing vs being a bit more driven resulting in, on average, more grouchiness.

</comment><comment><USER34> > _The bottom line: workers in enclosed offices were by far the happiest, > reporting the least amount of frustration on all 15 of the factors surveyed. > Workers in cubicles with high partitions were the most miserable, reporting > the lowest rates of satisfaction in 13 out of those 15 factors._

Really? you don't think that he people with personal offices are not in better, higher paying, less menial jobs to begin with? I think that would be obvious and clearly a better reason that they are happier. If there are some distractions and lack of total privacy, but you love what you are doing, do you really think that you are going to be miserable?

Please stop with the correlation posts where there is more obvious potential conclusions. So annoying.

<comment><USER35> While I share your (healthy) skepticism about scientific reporting, a good researcher would've attempted to structure their experiment to control for this very effect.

I don't have ScienceDirect access so I can't check the research or methodology, but from reading the abstract & the tables I can see it appears the reporter's conclusion came directly from the experiment, so it's far less likely that this is a reporter mistaking correlation for causation.

<comment><USER36> A good researcher would have the cash to hire hundreds of people and intentionally randomly assign them to different work environments, I guess.

Then we would be picking on how they measured productivity and whether the results held up over long periods.

<comment><USER34> > _A good researcher would have the cash to hire hundreds of people and > intentionally randomly assign them to different work environments, I guess._

Wrong, you lack the same basic, problem solving logic that I am referring to.

A good researcher would have asked additional questions such as "On a scale of 1-10" \- "how enjoyable is the actual work that you do here?", "how satisfied are you with the amount of money that you are making?", "where do you see yourself in five years". These aren't the best quesions that I could come up with, I am just giving examples off the top of my head.

It would be easy to see how unhappy these workers are with other things in their lives rather than if they were in a cubicle vs a private office.</comment></comment></comment></comment>


Functional Programming in a Dysfunctional World - <AUTHOR> https://underthehood.myob.com/functional-programming-in-a-dysfunctional-world

<comment><USER2> Does anyone with a disqus account want to mention that the "Bool" in the type signature of isKey should be "Maybe Bool"?

<comment><USER3> I'm afraid the type signature is correct. Please refer to the following gist.

[https://gist.github.com/anonymous/a0046e1ca87662a018f2](https://gist.github.com/anonymous/a0046e1ca87662a018f2)

</comment></comment><comment><USER4> Sockpuppet votes and comments are not allowed on Hacker News.</comment>


SOA Series Part 3: Documenting and Generating Your APIs - <AUTHOR> https://techblog.livingsocial.com/blog/2014/06/26/soa-series-part-3-documenting-and-generating-your-apis/

<comment><USER2> Good article. I was recently surprised to find that DreamFactory ([http://dreamfactory.com/](http://dreamfactory.com/)) is also using Swagger. Only word of caution I have to JS folks is that the swagger-js implementation for client resource generation is in need of some serious cleanup. Luckily, DreamFactory has done some of this in an Angular module and made it open source: [https://github.com/dreamfactorysoftware/angular- dreamfactory...](https://github.com/dreamfactorysoftware/angular- dreamfactory/blob/master/angular-dreamfactory.js)

Overall though, working the past few months with Swagger has been a good experience.

<comment><USER3> I've had the opposite experience trying to work with Swagger in a dynamic server-side language (node). It's just a major pain to work with and the node implementation has many obvious bugs that are being ignored by the developer. Swagger, to me, only seems to be a good option when most of the meta data is coming from static analysis. It works well in languages like Java, but not so much in languages that are less syntactically strict. And since it's not really designed to be written by a human, you're stuck having to use some hack (either of your own design or the poor 3rd-party options currently available) to generate the Swagger json.

I've been much happier with [http://apiblueprint.org/](http://apiblueprint.org/) and it's approach of making the executable documentation writable by developers.

<comment><USER2> Ah, we are using Java and using the Swagger jax-rs implementation as well. Good point though, not too surprised the Node implementation is lackluster.</comment></comment></comment>


Sshlurp - Retrieve SSH public keys from remote hosts - <AUTHOR> https://github.com/cmars/sshlurp

<comment><AUTHOR> Quick project I made last night -- an SSH public key scanner. Mind your P's and Q's and only use this on networks you have permission to scan.

</comment><comment><USER2> So, kind of like the stock ssh-keyscan, but in go?</comment>


Another Programming Idiom You've Never Heard Of - <AUTHOR> http://prog21.dadgum.com/141.html <comment><USER2> From June 6, 2012. 33 comments at [https://news.ycombinator.com/item?id=4078211](https://news.ycombinator.com/item?id=4078211) .

(I was hoping there was a new Hague post, then realized it was one I had read before.)</comment>


How cash secretly rules surveillance policy - <AUTHOR> http://www.salon.com/2013/06/18/how_cash_secretly_rules_surveillance_policy/ <comment><USER2> From the title I was really hoping this was going to be a story about the differences between cash and checks/credit cards/ACH.

In case you were equally disappointed I do have a pointer to an interesting article from PET 2004 about the anonymity of banknotes but sadly I only have my hard copy. The slides are here:

[http://petworkshop.org/2004/talks/kuegler.pdf](http://petworkshop.org/2004/talks/kuegler.pdf)

If you have a springer account or (great google-fu and patience) you can get the full article:

[http://link.springer.com/chapter/10.1007/11423409_8](http://link.springer.com/chapter/10.1007/11423409_8)

<comment><USER3> I really don't understand why banknotes aren't imaged (or just serial numbers recorded) at more points of distribution. Making it an ABA or merchant- security requirement and integrating it into PoS, then requiring that those records be turned over for AML purposes (under existing laws, just as regulations), and then those records (secretly?) turned over to FinCEN and NSA, would seem productive.

<comment><USER4> Er, do you mean having every single POS scan each and every banknote? I can see it working with fully-automated POS, but it's a no-go for regular tills -- can you imagine mom&pop having to scan each note?

Or was this a _modest proposal_ that just went woosh by me?

<comment><USER3> It doesn't have to be _every_ POS. Just do scanning first at the federal reserve banks, then at merchant banks and cash in transit companies, then at certain big chain stores (and in loading ARMs). Use insurance discounts to incent adding it.

</comment></comment></comment></comment><comment><USER5> You know, medical journals make authors prominently disclose any interests that might matter, and biomedical research has a reputation of being less than squeaky-clean. Expecting the same norm in political journalism doesn't seem inherently ridiculous, even if it's the last thing anyone would expect today. It may be somewhat automatable with natural language processing and databases of contributions.

</comment><comment><USER6> Damn! I read this as "How to cash in secrecy rules surveillance policy"

Please herewith be guided thereto accordingly:

"Big Money has helped create that disconnect, even though Big Money is somehow written out of the story"

</comment><comment><USER7> C.R.E.A.M. Get the money, dolla dolla bills y'all.</comment>


I found an obscure political joke in the scan of a 1971 IBM logic block manual - <AUTHOR> https://twitter.com/kenshirriff/status/1249090752983912448 <comment><USER2> The Burroughs OS ("Master Control Program") in the 70s had a routine from which all other processes were started. Its name was MotherForker(). It was eventually renamed when HR found out.

<comment><USER3> Burroughs MCP impresses me with its lifespan (which is ongoing)

Initial release 1961; 59 years ago

Latest release 19.0[1] / June 2019

I wonder who uses it today and for what?

<comment><USER2> Definitely. The OS, HW and Extended Algol had some nice features that were ahead of their time. I haven't kept up, but their mainframes were very popular with banks etc.

</comment></comment></comment><comment><USER4> I found an obscure dirty joke on p. 46 of the _Mac OS X Assembler Guide._ [1]

      .fill 69,4,0xfeadface | put out 69 0xfeadface's

[1] [http://personal.denison.edu/~bressoud/cs281-s07/Assembler.pd...](http://personal.denison.edu/~bressoud/cs281-s07/Assembler.pdf)

<comment><USER5> AIX used to (probably still does) use DEADBEEF as a hex value to clear memory out.

<comment><USER6> [https://en.wikipedia.org/wiki/Hexspeak](https://en.wikipedia.org/wiki/Hexspeak)

There are some fun entries there for hex values used as magic numbers.

Apple have some great ones used in their crash report exception types - 0x2bad45ec (too bad for sec) and 0xc00010ff in the event of being killed for overheating.

<comment><USER7> A list of such codes: [https://developer.apple.com/library/archive/technotes/tn2151...](https://developer.apple.com/library/archive/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-EXCEPTION_INFO)

</comment></comment></comment></comment><comment><USER8> The manual has a diagram of a FET (field-effect transistor) with the source, gate, and drain. Someone wrote on the diagram: Nixon FET. Economic Drain. Water Gate, Unimpeachable Source.

<comment><USER9> For those for whom those references are a bit before their time:

[https://en.wikipedia.org/wiki/Richard_Nixon](https://en.wikipedia.org/wiki/Richard_Nixon)

[https://en.wikipedia.org/wiki/Watergate_scandal](https://en.wikipedia.org/wiki/Watergate_scandal)

<comment><USER10> I was born in 94 and don't live in the US.

References to Watergate are ubiquitous (especially thanks to the angle journalists like to take on the current US president) and it was probably mentioned in history classes in school too at some point. I know it's supposed to be part of the curriculum in history classes in some German-speaking countries.

Granted it _might_ not be familiar to someone from a non-western country though.

</comment></comment></comment><comment><USER11> Many years ago, in a previous life, I heard about the ~friendly competition between Caltech's Dabney and Flemming houses. Various spacecraft components would have "DEI" (Dabney Eats It) or "FEIF" (Flemming Eats It Faster) hidden on them. But there's apparently nothing online about that. Or at least anything that's indexed.

Anyone?

<comment><USER12> Courtesy of Dabney Hovse's official website: [https://dabney.caltech.edu/wiki/doku.php?id=dei](https://dabney.caltech.edu/wiki/doku.php?id=dei) (see the end paragraphs about the moon and Voyager)

</comment></comment><comment><AUTHOR> Found on Figure 1-20, page 1-11 of the manual [1]

[1] [http://bitsavers.trailing- edge.com/pdf/ibm/logic/SY22-2798-2...](http://bitsavers.trailing- edge.com/pdf/ibm/logic/SY22-2798-2_LogicBlocks_AutomatedLogicDiagrams_SLT,SLD,ASLT,MST_TO_Oct71.pdf)

<comment><USER13> This seems to be an older or non-standard FET depiction

The modern symbol has an arrow and doesn't have a closed rectangle

<comment><USER8> Yes, this was IBM's symbol for a FET. They had their own nonstandard symbol for bipolar transistors too, three stacked boxes labeled N, P, N, with a triangle on the emitter. (See page 1-4 of the document above.) IBM also had their own logic gate symbols: an OR gate looked like an AND gate, and an AND gate looked like an op amp.

I came across the FET joke while looking up IBM transistor symbols in response to TubeTime's thread on the history of transistor symbols (which is an interesting thread you should read): [https://twitter.com/TubeTimeUS/status/1249023089528078337](https://twitter.com/TubeTimeUS/status/1249023089528078337)

<comment><USER14> Why is that?

My "IBM is evil" bias leads me to guess they wanted to make their own standard that people started using. Then charge ridiculous license fees.

<comment><USER8> I think several factors led to IBM's non-standard symbols. The standards didn't exist at the beginning, so different companies used different things. IBM also had historical baggage, wanting to stay consistent over time. In some ways IBM's symbols were better, for instance making NPN vs PNP obvious. Finally, IBM was big enough that they could do their own thing and train their own people.

</comment></comment></comment></comment></comment><comment><USER15> Tektronix, longstanding producer of high-end electronics testing and measurement equipment, used to be heroes at both drawing beautiful schematics as well as adding silly little easter eggs to them. Some samples: [http://turingbirds.com/temp/tek-datasheets/](http://turingbirds.com/temp/tek- datasheets/)

</comment><comment><USER16> "The trouble with political jokes is that very often they get elected"

Will Rogers

</comment><comment><USER17> Who knows the amount of jokes being written now given the current political landscape...

</comment><comment><USER18> I wonder what year this really is from.

Watergate wasn't a thing in 1971.

<comment><USER19> Well, the way it's been annotated, I'd bet whoever did the joke scrawled it in a few years after it was printed.

</comment></comment><comment><USER20> OMG, 1971, it's almost like finding a joke in a cave drawing!

<comment><USER21> Now come on, 1971 wasn't all that long ago. I got married for the first time that year. My car at the time had a rotary engine and it cruised at 85mph on the road every weekend. Did I mention that fuel was 31 cents a gallon? (And that was classed as expensive.)

It really wasn't back in 'horse and buggy' days.

<comment><USER22> Interestingly the things you mention do make it sound like a different era. Many millennials don't drive, don't know what fuel costs today, and have no idea what a rotary engine is. The American fascination with cars probably peaked around 1971.

<comment><USER23> _Many millennials don't drive_

An aside but I've always found that turn of phrase bemusing. The right word is "can't", nobody says "I don't swim" or "I don't wire a plug". It's like people realise that it's something they ought to be able to do and are deficient in it.

<comment><USER24> There are also urban dwellers who can drive, hold a license, but don't own a car due to cost or space issues.

Undoubtedly more common in Europe - lots of Londoners don't own cars because there's nowhere cheap to park at either end of a trip, the traffic is bad, and the public transport is usable.

<comment><USER23> _who can drive, hold a license, but don 't own a car due to cost or space issues._

In my experience those people never use that phrase, they say "I don't have a car".

</comment></comment></comment></comment></comment></comment><comment><USER25> not too obscure

<comment><USER26> Yeah I was surprised by that description too. Wasn't the topic the biggest political event of the 20th century?

<comment><USER27> There are people in the workforce of our industry that were born in 21th century. In a few years, they will be the majority of our industry.

<comment><USER7> The ones who've taken 11th grade history should know this, at least…

<comment><USER27> American history in the US, maybe. Rest of the world probably doesn't care - and if a typical history class is like all my classes in primary, secondary and high school, you barely reach World War II when the school year ends.</comment></comment></comment></comment></comment>


US Army awards Microsoft with $480M HoloLens contract - T-A https://www.theverge.com/2018/11/28/18116939/microsoft-army-hololens-480-million-contract-magic-leap <comment><AUTHOR> I found the HoloLens SDK to be very confusing to develop apps on. I got to try out solidworks on HoloLens which was really cool. I feel like the collaborative aspects of AR in enterprise is pretty huge.

</comment><comment><USER2> Not trying to be snarly but on HN there isn't a lot of discussion of MS, due to what feels like reasons not related to technology but political. I can see when some small project from google changes name but big news related to MS and very much about widespread technology adoption doesn't figure (except when its negative).

Now i don't mind but i am curious - is there a platform that is less politically inclined and has more tech related news?

I mean i hadn't even heard of hololens and only about Oculus etc and here they are doing 1/2 a billion dollar contracts. I don't want this to happen again...

<comment><USER3> I suspect the reason you haven't seen much about Hololens lately is that it was released in 2015. I think it's been covered pretty extensively here over the years, though. If you're curious about other sites, you could check out [https://lobste.rs/](https://lobste.rs/)</comment></comment>


Ask HN: How to tell if you're in a virtual machine? - <AUTHOR> Trying to figure out how to identify if an application/process is running inside a virtual machine under Windows and Ubuntu. This is for software licensing, so someone cannot license one copy of our enterprise software in a VM and then run infinite copies inside VMs.
I am focusing on Windows first, as that is expected to be more complicated. The application is a C++ GUI application, with a typical GUI and such.
Since we work in C++, I spent some time looking at the Windows Management Instrumentation (WMI) COM interfaces, but suspect that method can be fooled quite easily. And that method only identifies using the built-in Windows virtualization, and not other virtualization methods as used by VMWare or VirtualBox.
I've also seen statements that a timing test is the only reliable method, but with processor speed increases, is that method unstable as well? <comment><USER2> One starting point would be stackexchange [1] [2]

[1] - [https://unix.stackexchange.com/questions/89714/easy-way- to-d...](https://unix.stackexchange.com/questions/89714/easy-way-to-determine- virtualization-technology)

[2] - [https://reverseengineering.stackexchange.com/questions/1686/...](https://reverseengineering.stackexchange.com/questions/1686/how- to-detect-a-virtualized-environment)

<comment><AUTHOR> Thanks for these great resources my earlier searching of StackOverflow did not reveal.

</comment></comment><comment><AUTHOR> Some of that I've learned so far, it look like starting with Windows 10, version 1607 and Windows Server 2016 the VM Security features of Windows are automatically enabled when the Hyper-V hypervisor is enabled, and when that is enabled other VM systems are unable to run due to security logic in Win10. Further, the Hyper-V hypervisor is running inside a VM, so testing for the Hyper-V hypervisor being enabled and active is looking like what MS is trying to push this situation into being a single, simple setting check for being in a VM or not. More research to follow, which I'll report back here.

</comment><comment><USER3> I have thought of this kind of things, but for a different reason, which is hardware and software design to prevent the detection of VM and sandboxing (and stealth debugging) (if these options are enabled and configured by the end user). This also has the advantage to ensure that if something changes in a newer version which the software does not expect, it can be configured to emulate the older version perfectly, too.

</comment><comment><USER4> Mind you, "running in a VM" might not be a sign of piracy: apps exist that aren't supported any more (even vendor doesn't exist any more!) and wouldn't run on Vista or newer; or the client doesn't wish to have actual Windows boxes on the network.

Be very, very sure you are not impinging such legitimate use; people get angry when their paid-for software decides they're unworthy.

<comment><AUTHOR> We don't mind our software running in a VM. What we mind is multiple copies of the same license on different VMs. When a client purchases a license, the terms include the option of VM deployments, which trigger additional auditing rights. So if a client has an air-gapped no-VM license, we want to block that license from running on a VM.

<comment><USER4> Ah, okay. That makes sense, thanks for the clarification.

</comment></comment></comment><comment><USER5> i think that if you get the hardware info you will be able to find out some virtual pieces listed in there.</comment>


The original .NET garbage collector was written in Common Lisp - <AUTHOR> https://twitter.com/rainerjoswig/status/1264664590853562368 <comment><USER2> > was written in Common Lisp and automatically translated to C++

That's the reason the .NET GC source code is still in one single massive .cpp file. I mean, look at it [1]. Github even refuses to display it.

[1] [https://github.com/dotnet/runtime/blob/master/src/coreclr/sr...](https://github.com/dotnet/runtime/blob/master/src/coreclr/src/gc/gc.cpp)

<comment><USER3> Well it works much better than the JVM one so they must be doing something right. I never saw processes GC lock up like JVM until I worked on a big Java project.

<comment><USER4> I could say the same thing with the names swapped. I have never really seen a JVM process stall more than a few hundred ms. The CLR process I work with stalls for multiple seconds every 30 minutes ish.

Edit: and by this I don't mean that one of us is wrong. I mean that it might depend more on the application and its memory allocation patterns than the runtime.

<comment><USER5> btw. you can't compare the two. dotnet works way closer to the metal than java does. that's due to better interop and also since span exists, which also has more/better control over unmanaged memory in a more accessible way. also struct's exists which eliminates a lot of problems when memory constrained. example most java date objects are classes and use way more memory than any available object/library in dotnet (which are using structs)

</comment></comment></comment></comment><comment><USER6> I'm not sure this was terribly uncommon at the time. My work for a thesis was prototyped in Scheme and then ported to C once I was sure I had all the kinks worked out. And I know I wasn't the only one who did that.

I found it to be a much more efficient way to work iteratively, because software that's written in a lisp is fundamentally more amenable to change than software that's written in a language like C.

Today, not so much, because the gap has closed a lot. IDEs and improvements to the ergonomics of lower level languages have made them a lot more convenient to work in end-to end, and cheap memory and compiler improvements have made it a lot more feasible to just ship code that was written in a higher level language.

</comment><comment><USER7> I've heard a fair amount over the years of Lisp as a great code generating language. I wonder what sort of thinking took place in this intersection between writing in a macro language and imagining what the generated language would do, and then the assembler...

<comment><USER8> Can you elaborate on the part "Lisp as a great code generating language"? Just curious. I tried to learn Scheme for SICP but then switched to the Python version.

<comment><USER9> Lisp's big strength is that since the program itself is represented in the same form as the data structures, you can very easily generate executable programs by just slapping lists together. I'd recommend going back to the Scheme version-- I initially didn't understand the cool factor of Lisp either, until I used it for a while (and found macros).

</comment></comment></comment><comment><USER10> Here are some articles on memory performance issues by the current maintainer of the 35,000 line GC file:

[https://devblogs.microsoft.com/dotnet/work-flow-of- diagnosin...](https://devblogs.microsoft.com/dotnet/work-flow-of-diagnosing- memory-performance-issues-part-0/)

</comment><comment><USER8> Always amazed by the skills of people who can write language translators without much difficulty.

<comment><USER11> It only looks hard until the very first compiler design class, then it is a kind of mechanical exercise.

What requires expert level are the error messages, the quality of generated code and runtimes performance.

<comment><USER12> yes, excepting that many have trouble with the compilers class. if you get through it and do well you're probably fine.

<comment><USER13> Compiling from lisp is even easier because parsing is trivial.

<comment><USER11> Until the year before the one I took compilers design, the choice of programming languages for the implementation was free, except for any Lisp or Prolog derived languages weren't allowed.

The responsible professor considered the final project would be too easy for anyone using them, and he was kind of right.

<comment><USER14> One would say Compilers is a multidisciplinary subject and I think it is fine that some parts (e.g. parsing) might be boring for some, and some other parts (e.g. optimizations, codegen) might be exciting :)

</comment></comment></comment></comment></comment></comment><comment><USER15> I would be very interested to understand how the translation to C was done. I would love to prototype like that. The CL to C translators that I know produce code that is much more complicated. This is extremely clean in comparison.

<comment><USER16> I guess with a one-off translator you can spend more time on the patterns you know you have to translate well instead of having to handle every single possibility that _could_ potentially come up in code. At work we can do something similar with our C#-to-everything-else compiler which handles a subset of C# 5, since for many things it's easier to just change the single line in C# than spending a day implementing a complicated feature.

The other reason the code is somewhat clean (albeit long) is probably that there's been 20 years of work on it. And it probably wasn't that long in the beginning.

<comment><USER15> I already knew that but defining such a subset that it is at the same expressive and flexible enough is a challenge by itself. More even so if it is used to build a GC. Now I am curios: can you provide some more details about what C# subset are you using?

<comment><USER16> Well, it's perhaps not only the language subset, but also part of the standard library you have to provide or re-implement. I don't know Lisp too well, but I'm sure there are parts of it that are not necessarily mandatory for creating a prototype of a garbage collector.

As for C#, the things we don't support are:

\- yield statements: codegen for that is not fun to do on your own and hand- writing an IEnumerator is annoying, but not too bad. And back when we started we couldn't get the generated code from Roslyn, maybe there's a way by now to do that.

\- async/await (could nowadays be converted into pretty much the same in JS at least, but Task/Promise/CompletableFuture work slightly differently anyway and there aren't that many places in the codebase that need this, so they can be patched)

\- dynamic (no reason to use it, thus no reason to support it).

\- Some generic constraints, e.g. new(): We currently emit JS, TypeScript, Java, and Python, along with a number of internally-relevant output formats like documentation – and .NET generics already don't map well to Java generics (or vice-versa), and are mostly useless for JS and Python, anyway.

\- goto, unless for fall-through in switch

Most "normal" things like types/members/statements/expressions do work properly and the subset isn't too bad working in (it's also not a particularly _small_ subset, of course). A lot of additional work comes in getting the necessary parts of the BCL to work on the other side of the conversion, of course, but that is a separate concern next to language features.

</comment></comment></comment></comment><comment><USER17> Interesting how Lisp is used in production

<comment><USER18> Kind of production. It was initially written in Lisp, then translated to C++ to go to production and maintained / extended from there.

That's a great way to prototype -- use what you know and then rewrite (or in this case transpile?)

<comment><USER19> However unlike most prototypes, this one wasn't thrown away, but rather transpired into production code.

<comment><USER20> > _unlike most prototypes_ , this one wasn't thrown away

I wish...

<comment><USER21> "It's working code so deploy it now. You can pretty it up later."

Yeah, I've heard that one too many times. It amazes me how much that experience changes how a developer prototypes.

<comment><USER22> I'm reminded that I once read of someone using the Napkin look-and-feel for Java Swing as a way of managing customer expectations.

[http://napkinlaf.sourceforge.net/](http://napkinlaf.sourceforge.net/)

 _Edit_ Here we are: [https://headrush.typepad.com/creating_passionate_users/2006/...](https://headrush.typepad.com/creating_passionate_users/2006/12/dont_make_the_d.html)

</comment></comment></comment></comment></comment></comment><comment><USER23> Why? I.e. why not some sort of Scheme?

I absolutely don't meat starting a "holy war", the question is intended purely for sake of learning more about Common Lisp, what features does it have which make it a right tool for this job in particular.

<comment><USER24> They had people who knew Common Lisp _and_ garbage collection.

Plus Scheme has no batteries included.

<comment><USER25> But the target language in this case (C++) is also light in terms of batteries. It is most likely that CL was at their disposal and Scheme wasn't.

</comment></comment></comment><comment><USER26> I wonder when will .NET get a SOTA low pause time collector like openjdk has with both ZGC and Shenandoah Seems even more critical as C# is widely used for games

<comment><USER20> Most of .NET is moving towards avoiding heap allocations altogether, the latest versions improved a lot in that sense. A great example is the new System.Text.Json API, that can serialize/deserialize JSON documents up to 1 MB with 0 heap allocations, using ArrayPool

<comment><USER4> Which is great for Greenfield projects with engineers that keep up to date with these latest developments.

If one chooses to pour time into improving the GC instead of the language, the benefits are reaped both by existing projects and new projects by old-school developers.

<comment><USER20> Some of these changes are happening in the runtime itself, so many projects will get benefits just by updating to a newer version (something you would have to do anyway to get GC improvements).

For example, System.Text.Json is the default in ASP.NET Core 3.x, updating to 3.0 would use it instead of Json.NET unless you explicitly opt-out.

In the same way many APIs are starting to accept Span<T> in addition to IEnumerable<T>, Lists or arrays, so it's easy to opt-in into that. Other APIs are using it internally to avoid copies, so you don't need to do anything to get benefits.

</comment></comment></comment></comment><comment><USER27> Hmm. What was collecting the Common Lisp's garbage then?</comment>