Ask HN: what tools to use for livestreaming a rocket launch - <AUTHOR>

Copenhagen Suborbitals is a non-profit organisation that is working on launching a human into space and bringing him back safely. They already hold a number of records (largest amateur rocket, first controlled mid-flight abort of an amateur rocket, largest amateur engine, etc.) and are steadily progressing towards the goal. Noone is getting paid, and the only income is through donations (currently around $10.000 a month)
This summer there will be five rocket launches from the Baltic sea.
The first launchwindow is 22. - 24. of june where the space capsule Tycho Deep Space will be launched with the abort engine Big LES.  The other four tests are smaller rockets to test telemetry, recovery, etc. All rockets will be fired from the floating launchplatform Sputnik that will be sailing to the launch site from the Danish island Bornholm (30 km.) on the launch dates. The launches will all be sealaunches east of Bornholm in an area controlled by the Danish navy.
My job is to make sure there's a livestream of all the launches on the Internet so that everyone who wants to can follow it live. Here's the setup we have:
There are a number of cameras, one on the Sputnik launch platform (x-y-z and zoom controlled from the Internet), one on the rocket, one on a dinghy in the water 300 meters from the launchsite, one on the support boat 2 kilometers away, and possibly a few more. On top of this we have one or more audio channels consisting of launch commands VHF. All of these streams are sent via wi-fi to the supportship where they will be compressed (h.264) and sent the 30 km. via directional antennas over wi-fi to Bornholm. Here the audio and video streams are mixed to a single channel that is broadcasted to the Internet. In Copenhagen there will be a producer that chooses which video and audio stream to send to the livechannel, and a speaker that can comment on the events as they unfold. Furthermore there are a number of prerecorded clips that the producer can choose to put up on the livestream. (rocket launches are terrible television; 2 hours of waiting and 5 seconds of action. So you need some interesting content to keep things flowing)
So here's the question:
what software/hardware do you use to livemix a number of audio and video feeds? We have the following criteria:
- Incoming video streams are h.264 encoded (can be something different if needs be, but must be compressed and sent via HTTP)
- We need to be able to remote control the setup over the Internet; The producer will be in Copenhagen and the  livemix setup will be in Bornholm. The producer must be able to view thumbnails or a mosaiq of all available videofeeds and choose which one is broadcasted to the livechannel.
- We need to be able to mix audio channels in the same way; There are a number of audio channels from the launch site, and an audio channel of the speaker in Copenhagen.
- We need to be able to overlay text, preferably like the rolling bands in the bottom of the screen that many TV stations have.
I haven't been able to find anything that fits our (nonexisting) budget.
Any good suggestions?
Links:
Copenhagen Suborbitals homepage:  www.copenhagensuborbitals.com
Tycho Deep space astronaut capsule: http://www.copenhagensuborbitals.com/tychodeepspace.php
Big LES engine: http://www.copenhagensuborbitals.com/bigles.php
Video of last years launch: http://www.youtube.com/watch?v=GmGmymAWI4E&feature=related
Recording of a livevideo of a static engine test we made to test the technical setup (one camera only): http://www.youtube.com/watch?v=oVp3JHYqRyA (engine fires at 4:12:07 ;-)) <comment><USER2> Wow thats a TON of wishes and a complex task. You can buy a live encoder and external mixer and mix live signals to the encoder then live to the internet. Because you are already using streaming cameras, it may be difficult to switch during a broadcast. Although, Boinx software seems to have a solution to mix video and broadcast to live stream. Their documentation doesnt exactly state how many live stream inputs they support so you might want to send them an email.

<comment><AUTHOR> Thanks a lot for the reply.

Yes, it is quite a lot of wishes, especially give our budget of 0. That doesn't mean it can't be done though :-) I'll check out Boinx.

</comment></comment><comment><AUTHOR> Clickable links:

Copenhagen Suborbitals homepage: <http://www.copenhagensuborbitals.com>

Tycho Deep space astronaut capsule: <http://www.copenhagensuborbitals.com/tychodeepspace.php>

Big LES engine: <http://www.copenhagensuborbitals.com/bigles.php>

Video of last years launch: [http://www.youtube.com/watch?v=GmGmymAWI4E&feature=relat...](http://www.youtube.com/watch?v=GmGmymAWI4E&feature=related)

Recording of a livevideo of a static engine test we made to test the technical setup (one camera only): <http://www.youtube.com/watch?v=oVp3JHYqRyA> (engine fires at 4:12:07 ;-))</comment>


The Founder of Outlier Shares His Tips on Commuting by Bike - <AUTHOR> http://gizmodo.com/the-founder-of-outlier-is-here-to-talk-about-the-best-b-1575359289 <comment><USER2> Given all of the discussion about biking in Copenhagen and Amsterdam, do they have problems with clothes that don't handle the 'the repetitive motion of cycling'? If not, why not? Is it really the clothes, or the type of bike?</comment>


Rolling Your Own Grid Layouts on the Fly Without a Framework - <AUTHOR> http://designshack.co.uk/articles/css/rolling-your-own-grid-layouts-on-the-fly-without-a-framework/

<comment><USER2> I did this recently. I ended up using lesscss for the gory details:

      @space: 10px;
      @block: 60px;
      .block-width ( @blocks ) { width: (@block * @blocks) + ((@blocks - 1) * (@space * 2) ); }

I consider this to be the canonical piece on grid-based design:

<http://www.slideshare.net/riomusi/grids-are-good-2593754>

<comment><USER3> There's a new book from Khoi Vinh, just read it and liked it a lot. Also it's the first book on applying grid based design on web sites instead of print:

<http://www.subtraction.com/2010/11/05/i-wrote-a-book>

</comment></comment><comment><USER4> I know it's popular to be a contrarian, but for us non web designers who occasionally need to do page layout, the 960 Grid generator at <http://grids.heroku.com/> is great. It doesn't suffer from the the cons that the author mentions - mainly bloat and overreach.

<comment><USER5> 1 KB Grid is even more minimal, with no hack selectors like clearfix to puzzle over:

<http://www.1kbgrid.com/>

<http://www.1kbgrid.com/css/grid.css> \- 960px example

</comment></comment><comment><USER6> > I also threw a "last" class on the last column to help us clear the margin.

FYI, excluding IE6, :first-child pseudo-class is universally supported. That would be a cleaner way to handle this rather than manually adding a class to the markup.

</comment><comment><USER7> Pretty sure you can't have a width of 222.75px, it would be rounded up to the nearest pixel and wouldn't fit in the container.

<comment><USER8> A relevant SO question and an article for more in-depth analysis:

[http://stackoverflow.com/questions/4308989/are-the- decimal-p...](http://stackoverflow.com/questions/4308989/are-the-decimal- places-in-a-css-width-respected)

<http://ejohn.org/blog/sub-pixel-problems-in-css/></comment></comment>


My year of no spending is over – here's how I got through it - <AUTHOR> https://www.theguardian.com/money/blog/2016/nov/26/no-spending-year-over-new-way-living-wealthier-wiser <comment><USER2> TL;DR

Journalist tries to grow up; succeeds;

Select quotes:

> give up spending on all but the essentials

> As a personal finance journalist people assumed I was good with money but > while I wrote a lot about the merits of saving, I wasn't practising what I > preached.

> I hope I have encouraged other people to reconsider their spending patterns > too.

My Verdict:

Experience logs that explain things like "de-clutter", "minimalize", "de-tox", "live a frugal life in which a missing tile on a roof (see article) is an unnecessary expense" and recommend the lifestyle, serve more to explain their authors problems with themselves than being useful life advice.

There, now you don't have to read the article. Do something fun in moderation with that time.

<comment><USER3> I don't know, I mean I consider myself to be grown up and successful; degree, child, mortgage, full time software development career.

I fall foul of the same problems that this journalist has tried to solve with this approach and it was interesting to read an account of someone who's taken a radical approach to their habits.</comment></comment>


Skype 4.0 Beta: It's All About Video - <AUTHOR> http://www.techcrunch.com/2008/06/17/skype-40-beta-its-all-about-video/

<comment><USER2> Disappointing that it only supports one-on-one video. You're still forced to find other tools if you need to videoconference with other members of your team, family, etc.</comment>


AT&T sued over layoffs–after promising more investment because of tax cut - <AUTHOR> https://arstechnica.com/tech-policy/2018/01/att-sued-over-layoffs-after-promising-more-investment-because-of-tax-cut/ <comment><USER2> The only thing surprising about this is that anyone is surprised.

Only takes half a second to think about where wages are on a balance sheet then tune out empty PR.</comment>


Ask HN: Know any good Email Servers? - <AUTHOR>

My company's web app is currently going through private beta testing. But as time goes by I'm starting to see that email integration is such a MUST for users that it's almost automatic for them to expect that the web app their using will inform them of any actions through their email.
I have experience setting up VPS's and such but I have no experience whatsoever setting up a good email server. I guess the best place to start is Google. But HN has been such a valuable repository of information and experience that I would find it idiotic of me to not tap into the collective intelligence here.
So my question is do you guys know any good email servers? something a bootstrap startup can afford for the mean time. Thank you! <comment><USER2> I recommend you find a friend, or friend of a friend who does sys admin work at a company or school, who uses Linux and one of the common MTAs -- sendmail, exim, postfix. Pay them a flat monthly fee to handle your email, and do whatever they tell you, get a VPS or hosted service or linux machine on a cable modem or whatever. Pay them until you can afford to have a "real" setup, and in the meantime focus on making your startup work.

Personally, I would put a light weight (cpu and bandwidth will be minimal) linux server on whatever is the cheapest way you can get a business class fixed IP. I use exim.

When olefoo said keep the MTA and web operations separate, and you asked "with a queue?", I think olefoo meant keep them on separate servers. The MTA and web operations are normally separate daemons that run, and the web submits an outgoing mail to a queue in the MTA, but it's not somethingk you have to write or set up, it's the default way an MTA works.

When olefoo mentioned keeping incoming and outgoing MTAs separate, that might be a good idea but I would warn that if your account notification email comes from a different IP address than is listed in your MX record, some of those emails won't get to users because they will be blocked, dropped, or spam- foldered.

Once you start having to deliver lots of email, you will find that there is an incredible amount of pain in doing it reliably. You have to regularly examine all your bounces, and check for successful delivery to test accounts at the big places such as yahoo, gmail, and hotmail. First, you will have to make sure your From: and other headers are configured exactly correctly. Get a reverse DNS record correctly set up. You will probably have to learn about SPF records and domain keys and stuff like that. It can be a chore.

I still have problems with it. I have fixed IP addresses from a business class Time Warner connection, and I have had those IPs for a couple of years now, and some spam block lists still list me as "dynamic" ips, even though I have been through the removal process over and over. I have given up on ever being able to deliver mail reliably to earthlink addresses.

</comment><comment><USER3> I run an email server on a VPS for my own use. I run Postfix [SMTP], Dovecot [IMAPS], and Procmail [email filtering/sorting]. I think it would certainly be affordable for a startup.

I've also, at some point in the past, looked at 90% of the email hosts out there, and tried my fair share. (And found none satisfactory to my (admittedly stringent) requirements.)

Email me, and I'll try to share what I've learned with you. (kngspook, gmail, you know the drill...)

</comment><comment><USER4> I can heartily recommend postfix <http://www.postfix.org/>

It's a good idea to keep a logical separation between the sending MTA and the receiving MTA (separate hostnames at the least, separate machines/instances is best because you can manage security policy better).

Do plan on keeping the SMTP operations separate from the web application, and if your application is going to read email, plan on building spamfiltering in from the beginning.

<comment><USER5> What do you mean when you say "keep the SMTP operations separate from the web application"? With a queue?

<comment><USER4> It's more about maintaining separation of concerns, back in the late '90s I dealt with a web app that was written as one massive perl CGI that was called from the webserver and from the web users .forward; it was ugly, buggy and if you added the right headers to your email you could do sql injections.

Run the mailreader as a separate user, have it talk to the data layer on it's own, basic informational hygiene.

</comment></comment></comment><comment><USER6> I recommend looking at postfix and qmail -- they were both written by people who understand security, but there are significant enough differences in their configurations that most people like one or the other but not both. De gustibus non est disputandum and all that, but it's worth looking at both so that you can decide which taste you prefer.</comment>


The £30m 'naked street' stops trying to mix cars and people - <AUTHOR> https://www.thetimes.co.uk/article/exhibition-road-kensington-the-30m-naked-street-stops-trying-to-mix-cars-and-people-7dj7rwn8c <comment><USER2> > "It has acted after research carried out for the council found a > "significant overall increase" in traffic speeds on the street since 2013."

But how many accidents or injuries?</comment>


Responding to the Explosion of Student Interest in Computer Science [pdf] - <AUTHOR> http://lazowska.cs.washington.edu/NCWIT.pdf <comment><USER2> The problem is that 'computational thinking' has become expected of a university education, _regardless of major_ , but universities haven't shifted to meet the need.

All the other basic requirements of a university education are filled through entry level classes - credit-fillers that students have to take in order to graduate. This structure works out well for everyone: the university ensures that students are getting a well-rounded education (as opposed to a trade- school degree) and maintains its reputation and the value of its product.

The only classes that students can take to demonstrate an ability in computational thinking are CS classes. Entry level CS classes, like those in the other engineering disciplines, are not like entry level classes in non- engineering disciplines. Most students that take ARCH 101 and LIT 101 are not taking them because they are interested in pursuing the major, they take them because they were the best-sounding classes that help them to fill their credit requirements. In doing so, they end up with a well-rounded education. In contrast, most students that take EE 101 are trying out for EE as a major.

CS entry level classes traditionally fell into the latter category. Demand has resulted in students treating them as part of the former.

The best thing a university could do is to figure out what skills that these employers are all demanding and offer entry-level classes to fill the need. Structure them to work with large numbers of students, just like all the other 100 and 200 level classes that everyone takes.

Here's the key part: advertise these classes relentlessly, to students and employers. Talk about how the university has seen the demand for these skills and has shifted to focus on them. Become known as a university where every student can get these skills as a part of their education, regardless of major, and most choose to.

Potential students will be thrilled at the prospect of a university where they can get a bankable education without having to commit to CS as a major. Strain on the CS major will go down and prestige will increase - if every student is getting the kinds of CS skills that employers require, then the ones that enter the major must be the hardest of the hardcore.

<comment><USER3> >credit-fillers that students have to take in order to graduate. This structure works out well for everyone: the university ensures that students are getting a well-rounded education (as opposed to a trade-school degree)

Do you really think the irrelevant classes are necessary at this level though? The student has had all of elementary through high school to be exposed to the broad subject range. By the time you enter university you should know what you're doing. None of my credit filler requirements have been especially enlightening or broadening; mostly just annoying. A Greek and Roman history class I took was interesting to me at least, but I don't see much value forcing another CS student to take it. If I have to take one more English class I might just drop out and start my own company.

Do you really think universities believe in the "rounded education" goal, or do they just know that making you take more classes gets them more money?

<comment><USER4> > Do you really think universities believe in the "rounded education" goal

This was the traditional role of Universities. It's only recently that they have become pressured to become trade schools and remove anything deemed 'unnecessary' or 'non-profitable.'

Of course when Universities filled that role, you didn't have choices as to what to use as, as you term it, irrelevant classes. Everyone had to have a broader education with classes drawn from many different disciplines.

<comment><USER5> > _It 's only recently that they have become pressured to become trade schools > and remove anything deemed 'unnecessary' or 'non-profitable.'_

They've come under this pressure because of the changed realities of the contemporary job market, combined with the rising cost of higher education.

College is largely an economic decision for the vast majority of people who attend. Unfortunately, some only realize this soon after graduating, unemployable with a mountain of debt.

So, this notion of churning out "well-rounded" students is an anachronism. Companies care about the hard skillset for which they are hiring. Period. In fact, they increasingly want people who are specialized beyond even a degree, let alone caring about what, say, a dev hire knows about biology.

In short, a trade school approach is _exactly_ what we need, as it most accurately reflects the realities of the new job market.

<comment><USER6> I think this is laziness on the part of employers. Nobody wants to offer training in a new job so they pressure for cookie-cutter grads that they can slot into junior roles.

<comment><USER7> Also a mark of generally severe weakness in front line managers of programmers. Training and mentoring are ideals that only work if those responsible for them are capable, vs. e.g. the standard issue failed programmer who's also generally not very good at management.

For those able to learn on the job pretty much by themselves, well, the above type isn't able to judge much about the real work they do, let alone their not visibly accomplishing much for weeks while they come up to speed.

</comment></comment></comment></comment></comment></comment><comment><USER8> How about "Possibly, they see people making ridiculous amounts of money in tech and want a piece of it?"

<comment><USER9> When I started college in 1982 as a CS/EE double major, the big-money major was petroleum engineering. If I remember correctly, they lost a lot of people who had done well in high-school when they hit the calculus for engineers classes.

<comment><USER10> It's just the same now with CS. We lost 75% of CS prospects in the first semester, almost all of them due to Calculus (although I think some of them came in with the malformed idea that programming was just like video games).

I kept in contact with some of the folks who dropped out or switched majors - they're working at convenience stores and the like.

</comment></comment></comment><comment><USER11> This is evidence that programming has become a skill akin to literacy. The migration seems similar to the hypothetical situation in which universities and society had primarily been based on an oral tradition of communication, and then this fancy new technology called "writing" appeared (at first only in "Departments of orthography science"). Some of those who majored in "orthography science" would go on to study it, comparing and contrasting the features of phonetic of symbolic writing methods. Many others would learn orthography science because it enabled them to learn and communicate much more efficiently in general.

Who wants to place bets on when country development metrics include "population % who know how to code" ... ? I'll wager no later than 2030 :)

<comment><USER12> I completely disagree.

Having everyone knowing how to code is the opposite of specialisation. It's inefficient and pointless. If a certain profession needs a piece of software, it's much more efficient for specialist developers to consult with domain experts, write that software, and sell it into the industry. Having every (for example) doctor being able to code adds negligible value, and I would argue the opportunity cost is awful. If my doctor has a choice to become a very mediocre coder or a better doctor, I would hope they choose the latter.

As for the comparison to literacy, there's simply no comparison. Illiterate societies are unable to progress past agrarian economies because illiteracy precludes specialisation, prevents the dissemination of knowledge, and makes it almost impossible to learn new things except by imitation or direct instruction. Literacy is a necessary skill in order to do much beyond dirt farming. Illiterate people can't, for example, even follow a moderately complex checklist. In contrast, I see no negative impact on society if most people can't code.

I don't spend my time studying anatomy; my micro-surgeon shouldn't spend his time studying coding, and I don't see how it would do anything but make him less effective if he did.

A society of part-time coders would do nothing but produce a lot of badly- written toy programs. What's the point?

<comment><USER13> Someone a thousand years ago would have dictated to his scribe the following:

"Having everyone knowing how to read and write is the opposite of specialisation. It's inefficient and pointless. If a certain profession needs a document, it's much more efficient for specialist scribes to consult with domain experts, write that document, and sell it into the industry. Having every (for example) doctor being able to read and write adds negligible value, and I would argue the opportunity cost is awful. If my doctor has a choice to become a very mediocre writer or a better doctor, I would hope they choose the latter.

A society of part-time readers and writers would do nothing but produce a lot of badly-written texts. What's the point?"

The comparison with literacy is incredibly apt. Even though very few of us moderns are professional writers, we all benefit by knowing the basic abstractions of letters and words. In the future, everyone will benefit from knowing basics of computation. Probably in ways we can't imagine now, just as an ancient Egyptian scribe could not have conceived of "commoners" writing YouTube comments or texting "whatup u?" to a friend.

<comment><USER14> This is an alluring retort, but I have to agree with kimdouglasmason that it has no actual weight. kimdouglasmason explains and gives examples of _why_ literacy has had such a huge impact on the world. You give no examples of how code literacy will have similar impacts. You just make an analogy and say it will affect the world "in ways we can't imagine".

Your argument could just as easily apply to electrical engineering. The whole world runs on electricity, how is it that no one knows Maxwell's equations! Everyone should obtain basic proficiency in applying electromagnetic theory: it will help the world in ways we can't imagine now.

<comment><USER15> The electrical equivalent of everyone knowing the basics of computation isn't 'understanding maxwells equations' it is being able to wire up a battery and a light bulb.

<comment><USER12> Many people who have successfully understood Maxwell's equations but were unable to grasp coding would beg to differ.

Over and over again on this board I see people underestimating how demonstrably difficult the concepts are for many people. As my evidence, I again cite the dropout rate of CS1 classes.

<comment><USER15> You misunderstand me. I don't mean that understanding coding is not as difficult as understanding electricity, I mean that most people should have an understanding of basic coding at about the same level as they understand basic electricity (ie. they know how to do some things like plug things together, can generally avoid starting fires, being electrocuted, blowing fuses, and so on). IOW, I am lowering the bar.

</comment></comment></comment></comment></comment></comment></comment><comment><USER16> I didn't understand this:

"10% of Princeton's students are computer science majors

Far more at MIT

10% of Princeton's faculty are unlikely to ever be in computer science!

Ditto"

It's the last two lines I don't understand. 10% of currently existing faculty are not likely to work in the CS department? Or it's unlikely that in the future 10% of Princeton faculty will work in the CS department?

And the 'ditto'? Far more than 10% at MIT are unlikely to be in computer science?

<comment><USER2> I think he's saying that "it's unlikely that Princeton will ever have 10% of its faculty dedicated to computer science". Despite the demand, universities want to remain balanced and avoid becoming trade schools.

"Ditto" means "same for UW"; Ed Lazowska is the department chair at UW.

<comment><USER17> _Despite the demand, universities want to remain balanced and avoid becoming trade schools._

Take a look at Matthew Reed's _Confessions of a Community College Dean_ as well. There are other factors at work:

1\. Tenured faculty can remain until they die. Almost every school still has tenured faculty from popular areas in the 70s.

2\. It can be dangerous to chase trends, thanks to tenure: if the school tenures a bunch of CS professors today, and then something else comes along tomorrow, those profs can remain for 50 years.

3\. Mandatory retirement ages were eliminated by the Supreme Court in the late 80s and early 90s (again, see Reed's discussion), which lends extra importance to points 1 and 2.

</comment></comment></comment><comment><USER18> We have _almost_ recovered to the number of CS degrees issued in 1985.

<comment><USER19> I never understood that factoid, and always assumed it was an illusion --- we must have manyfold more computer-related degrees now that back in 1985

<comment><USER7> In 1982 _Time 's_ "Person" of the year was the The Computer ( [http://content.time.com/time/interactive/0,31813,1681791,00....](http://content.time.com/time/interactive/0,31813,1681791,00.html)) and I can remember a MIT CS professor, I think it was Michael Dertouzos, bemoaning how this would further skew enrollment. (Note also that at that time most of the department's majors were on an EE track.)

Computers were red hot in a way I'm not sure even the dot.com boom reached, and that boom and bust cycle was perhaps longer.

</comment></comment></comment><comment><USER20> Totally unscientific opinion, but wouldn't increase in CS graduates and programmers mean lower salary for those newly minted graduates?

Or will we never have enough programmers?

<comment><USER21> Increase in supply, yes, but the question is if the demand will grow more quickly than the supply. If it does then salaries will keep rising (though probably more slowly). If supply growth outpaces demand growth then salaries will drop.

I don't think we really know enough about programming demand growth right now to make a call either way, we also don't know the scale of the CS graduate expansion.

In any case, this is a terribly simplistic view of things. Not all graduates are created equal, and not all jobs demand the same programmers. Neither programmers nor programming jobs are fully interchangeable widgets.

In reality there are multiple buckets to programmer supply, and multiple buckets to programmer demand. This is sort of the nice way of saying that there is a gradient between "has a CS degree but can't code out of a wet paper bag and probably never will" and "has a CS degree and knows how to solve truly hard problems and has the right foundations to be an excellent engineer".

IMO when people are entering a field purely for the cash, the latter pool won't expand by that much, but the former pool will expand greatly. This will depress salaries on one end of the industry but the impact on the other end won't be extreme. A dramatic expansion in CS enrollment IMO will cause a crunch in low-mid-end programming salaries while leaving high-end programming salaries mostly intact.

My main concern is if these college students are being sold a lie. Schools are holding up Google and Facebook engineers (and their salaries) as templates, but in reality most of them will end up writing enterprise code for a megacorp somewhere for $60K a year, and in fact the bulk of programming jobs in this country are much closer to that than they are to your archetypical Silicon Valley $200K job. This concern goes double for the Hacker School phenomenon, since they smell more opportunistic and get-rich-quick-y than traditional 4-year programs.

<comment><USER22> exactly on point in my humble opinion, people who are in it soley for the money will probably end up in these enterprise (Java comes to mind) jobs where it is not looked down uppon if you don't code in youre spare time.

And I don't mean to judge, the latter gtoup may have a healthier job-hobby- life relationship than me.

</comment></comment></comment><comment><USER23> One of the most interesting (and to me) significant points about this is the amount of non-CS majors taking CS classes.

My father, in his 70's, has run several large corporations over his career. We discussed this and he sees no need for "managers to learn to program". His view is that they can just hire computer people. I disagree. My experience is that if you don't know the basics of programming it's hard to know what to even ask for or what is possible. To say nothing of all the time saving personally writing little half hour scripts to do this and that.

My opinion is that anyone who is serious about a professional career involving information is very well served to know a bit of programming and handicapped if they refuse. I think maybe this realization is finally hitting home with others as well and this is partially responsible for the trend we are seeing (to say nothing of the perception of vast fortunes possible in startups).

<comment><USER24> I see this all the time. We have plenty of people that work _with_ computers, but don't program them. Their inability to write a 5 line script, or even realize they could walk into a dev's office, explain what they want done, and have it in their email inbox before they can walk back to their desk has them poking away in File Manager, dragging and droppings "opps, didn't mean to do that, where did that go", just wasting their lives away. Well, 'waste' is an exaggeration, but you know what I mean. They are doing something mundane, tedious, and utterly unnecessary, and they always express surprise and gratitude when I offer to knock off a script for them.

</comment></comment><comment> vezzy-fnord In relation to "coding becoming the next literacy" and having demographics on people who know how to code...

What use does a mere "learning to code" actually have to most people? How do we measure fluency in "coding"?

Think about it. A crash course on basic procedural constructs like loops, variables, functions and maybe some simple exercises where one makes use of a language's standard library is not particularly useful. Even the conceptual knowledge that one gains is relatively minimal.

It's not like the huge percentages of people "knowing how to code" will do anything meaningful with it. Why? Because they wouldn't have the skill.

Many discussions revolving around compulsory code education seem to completely ignore the tons of domain-specific knowledge one requires to put coding skills to any real use. It's likely that little of the "code literates" will ever contribute to an open source project, for instance.

This is because besides code, you have (potentially): a build system, continuous integration, documentation generator, actual protocols that must be understood (HTTP, DNS, FTP, etc.), use of OS-specific system calls and constructs, general knowledge of memory layout, knowledge of system administration, etc.

These are merely condensed into a nutshell. Code by itself is of little use without actually knowing how computers work in general, which is no small task to comprehend, and requires tons of domain-specific knowledge as to the many abstractions we have created around software and hardware. It's a perpetual learning experience. A person who has learned rudimentary C is of little use in any serious project that requires knowledge of the POSIX and/or glibc API, for instance.

It's a completely meaningless metric in general. Most people will just do some basic imperative coding in a highly abstracted knowledge with no real conceptual understanding of what actually goes on, and promptly forget about it. Maybe they'll remember how to write a recursive Fibonacci sequence procedure.

Software is more than code. It is complex and multi-faceted. I can see blind coding having some uses for things like VBA macros, but those can be picked up by individuals on a case-by-case basis, when and if they need them.

</comment><comment><USER25> Sure the interest is high, but what's the dropout rate for people, and what is the rate of people switching to other majors?

<comment><USER26> Exactly this. In my university in the first year there was 2750 students. After first semester only 323, second year 107, last year 82.

Let's be honest, money cannot motive you enough to try to learn for a job for which you have no passion.

<comment><USER27> What do the graduation rates look like, or is it too soon to tell?

</comment></comment></comment><comment><USER28> What I'd be interested in, if anyone has a perspective to share, is whether we should be worried? Will the job market change? Will our salaries stagnate or fall?

<comment><USER29> Personally, I think we are at a peak for outrageous programmer salaries. The market is currently correcting itself.

<comment><USER12> Programmer salaries aren't outrageous. Most peoples' real incomes have declined substantially, making programmer salaries look high. US GDP is $15.68 trillion (2012), with 146 million people employed (April 2014). That's $107,000 per worker. US median wage is around $27,000.

Programmers are one of the few occupations that have managed to retain bargaining power.

Compare the lifestyle (e.g. house, vehicle, ability to have a single income household with kids without getting into massive debt) a programmer in the Bay Area can buy right now compared to the lifestyle a plumber could buy forty years ago. The plumber of 1974 comes out ahead.

The only reason everyone hasn't noticed this huge decline is because the inflation numbers are rubbish and everyone has been kept distracted by wedge issues and wars.

<comment><USER30> Are you implying that GDP per capita and median wage should be the same?

<comment><USER12> By no means. I believe that having GDP per worker be 4x median wage is socially and politically dangerous, and results in persistent high unemployment because of lack of demand.

The sweet spot is somewhere in the middle. Capital needs a return, but we've seen current levels of wealth inequality in the past and it means bad things for the average person.

Edit: Another way of stating my position is that I'm against extreme income inequality. That does not mean that I am in favour of perfect income equality.

</comment></comment></comment></comment></comment><comment><USER31> Before people start preaching 'coding is the new reading/writing', let's get to high school CS requirements first (like any other common science/math class).

Also, I think there's a sweet spot between a full-on academic CS degree and a level of software proficiency to make someone useful on the job. Whether it be data analytics or basic web development, you don't NEED to know the ins and outs of automata theory or compilers to be a 'coder' with hands-on skills.

<comment><USER15> The point of 'coding is the new literacy' is that we also need _grade school_ CS standards.

</comment></comment><comment><USER32> If I was going into college this fall, instead of 15+ years ago, I'd focus on EE, ME, or Physics and just cherry pick advanced CS courses on the side.

<comment><USER23> If I was going to college this fall instead of 20 years ago I would get a tattoo on my arm reminding me that extra classes and networking pay off better long term than drinking beer and getting laid.

But... I'd probably do the same thing all over again anyway.

<comment><USER32> Conferences are better for that than college, all things considered, and the networking is better too.

<comment><USER23> Good point. And, the beer drinking is often at conferences too. The getting laid part...eh...well... Go to college kids! It's important and you will learn all kinds of great things.

</comment></comment></comment></comment><comment><USER33> In an interview just couple of days ago Knuth said something like 2% of human population finds this new "computational thinking" as native. Now we have 10% plus graduates coming out of Princeton and MITs in CS!

But what caught me is this line: _Students are figuring out that all of the STEM jobs are in computer science_

That pie chart is probably the most striking manifestation of "software is eating the world".

</comment><comment><USER34> It is so important to foster and support the growth of the CS curriculm, at all levels but at the university level especially. We need these classes to be well taught, and well funded. If 1000 students all want to learn the same thing, that's a lot of funding to do some really interesting and amazing things. This is not about provisioning more lecture halls!

The way students pick classes is a lot different from the way that a consumer spends money. You're already committed to spending a certain amount, especially if it's not impacting your major, class selection is a different set of variables. But I'm sure the surge in CS enrollment is at least partially mirrored in a broad increase of CSed spending overall.

What leaves me nervous is, I wonder if the tool set is really ready for mass adoption. The most direct effect of massively increased enrollment, and massively increased class size, will be overall more people who know how to code, which would be great, but also significantly lower median coder ability. Which will have a large impact over time.

</comment><comment><USER35> Do these trends hold in universities outside of the US? Because from where I come from at least, computer science is still as un-sexy as ever.

</comment><comment><USER36> Didn't this also happen in the mid-to-late '90s, with the first dot-com boom? I mean, I don't think that the proportion of CS majors dropped precipitously after the crash, but the rise certainly seems to correlate with demand for programmers.

It makes a whole lot of sense, really, except that if you started your degree in 1998, you were going to graduate right into a crash.

<comment><USER7> "[...] _I don 't think that the proportion of CS majors dropped precipitously after the crash..._"

MIT's EECS enrollment more than halved, after being 40% of the undergraduate body for more than 2 decades.

<comment><USER36> man, I wonder what happened to those guys? I was able to remain employed through the dot-com crash, but I know many people who were obviously better than I was that did not. It seems like it would have been brutal for a fresh graduate with no experience in '01.

<comment><USER7> A lot of them that were strong in math, getting the mostly EE or enough of both degrees, would have gone into finance as quants ([https://en.wikipedia.org/wiki/Quantitative_analyst](https://en.wikipedia.org/wiki/Quantitative_analyst)), which was a desired initial destination for many of them anyway.

Don't remember too much about the mostly CS track ones, I think it was fairly grim; I can remember at least one major, Fortune 50 or so company, rescinding offers they made one year (which obviously poisons the well for some time; one reason Kodak failed so badly in Japan). I couldn't remain employed during that period (had the particularly bad luck of joining Lucent at the beginning of 2001, just as it began its descent from 106,000 employees to 35,000).

</comment></comment></comment></comment><comment><USER37> What happened in late 2009? I saw the same inflection point in those redmonk github usage graphs.

<comment><USER38> There has been a cultural shift lately from "Ha! Those people are nerds!" to "Man, those guys are going to make so much money.". I would argue it has a lot to do with this movie:

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

Also, as a student at the University of Washington, I would like to note that, anecdotally, the quality of CS students has dropped through the floor. I'm a mechanical engineering major, but I often find myself helping my roommate with his CS homework, even though he's probably in the top five percent of CS students here. These people don't even understand basic things like what bytecode is.

</comment></comment><comment><USER39> Programming is not going to be as lucrative a few years from now. As soon as interest rates rise in a few years the startup boom will cool down a bit and the influx of new programmers will really depress the earning potential of the field.

<comment><USER23> Probably. But longer term software is only going to become increasingly important. Some refugees from the start up implosion (if there is one) will move on to other careers in other fields. Some will adjust and keep right on developing whatever comes next. There may be a bubble right now. But, it has a grain of truth to it. And that is... computing is changing the world.

</comment></comment><comment><USER40> Here in southern Europe is totally different. $90K for a new grad? That's incredible. Here, the majority of new grads earn about €15-25K. Take a look: [https://www.infojobs.net/madrid/analista- programador-j2ee/of...](https://www.infojobs.net/madrid/analista- programador-j2ee/of-i26ae3e603043659a932ada3aecb3f8)

(Says: J2EE Analyst with 3-5 years of experience and a lot of another requirements => €27-30K)

</comment><comment><USER41> This slide deck is misleading. CS is supply constrained, not demand.

I went to UW and wanted to major in computer science. At that time (1997), they accepted 80 students per year into the program.

80.

Guess how many students applied to the program every year? More than 1500. The supply was/is so constrained they do not consider anybody with less than a 3.9 GPA.

Even today, as per the slide deck, These schools accept 400, 800 students. How many do you think are applying?

<comment><USER7> That could be an "it depends". I can believe a lot of public universities have quotas on CS undergrads (and other majors, especially ones that require labs, and until recently as these things go that was a big issue for CS), but it's the mark of a good private school that if an undergraduate wants to major in X, they'll find a way. CMU is the only exception I know to this, has a quota of about 135 CS students the last time I checked.

According to this page [http://www.statista.com/statistics/183995/us-college- enrollm...](http://www.statista.com/statistics/183995/us-college-enrollment- and-projections-in-public-and-private-institutions/) , as of 2011 61% of students enrolled in public colleges. That's for students at all levels, however (you can use this page to subtract those, but it's breakdown is by gender: [http://www.statista.com/statistics/236654/us-post- baccalaure...](http://www.statista.com/statistics/236654/us-post- baccalaureate-enrollment-by-gender/) ).

</comment></comment><comment><USER42> What is the biggest reason for this growth?

<comment><USER43> A lot of commenters referred to money being the biggest driver but I think that's only a half truth. Rather, job security seems to be the most logical reason to study computer science. No matter who you talk to, in any field, there's a huge consensus that having knowledge and experience with computers increase your employment prospects (I'm sure this could be proved by scanning job boards). Combined with the current job market and popular opinion that college may not be worth it (especially for non-STEM majors), I'm not the least bit surprised that CS has gained such an enrollment.

<comment><USER44> Anecdotally, my experiences confirm this. My brother, who before, had never even tried to program, is currently a CS major. Most of his friends are too. They don't care about startups or startup jobs, they want secure jobs at big companies.

</comment></comment></comment><comment><USER45> Love the "have a beer while the students use Coursera" approach. As a student this would be amazing.

</comment><comment><USER46> A note to poor kids, or kids who don't want to rack up huge student loans listening to some some Blow Gard who didn't stay current, and spends a month talking about history of CS. Many of you can learn the employable CS skills on your own, with the help of the Internet, of course.

</comment><comment><USER47> This type of thing is very unsettling to me as a second year CS major. I might be one of the highest achievers in my college, but how am I supposed to compete with the thousands of kids graduating from MIT, Stanford, and Harvard? really scares me.

</comment><comment><USER48> One of the concepts I have been thinking about for an education system is based on this triad:

\- Symbol (mathematical languages / abstract interfaces)

\- Human (natural languages / human-human interfaces)

\- Machine (programming languages / human-computer interfaces)

Any particular subject or area of study is taught and learned using all 3 approaches taken together. Used as a foundational educational framework, this system could have potential to help cross discipline study through the assimilation of fundamental aspects of computer science, cognitive science, linguistics, and math into other fields. This also allows people to skip learning these topics as unpleasant prerequisites, which may not be well integrated with their field's particular goals.

Existing universities and schools will not be able to transition to these sorts of new holistic systems. Entirely new systems based on modern first principles must be created for the future of education.

</comment><comment><USER49> The obvious answer is specialization. Computer science needs to be split, at the very least, into theoretical CS and Software Engineering. From there, both CS and Software engineering will need to contain specializations as well. Software Engineering will splinter into Networking, Javascript Performance optimization, Compiler optimization, etc.

</comment><comment><USER50> Professionals who talk about this stuff never mention that learning computer science is a lot like learning a foreign language. The people who learn something in their early years tend to have an easier time learning new computer skills as they age. I wish more parents knew this.

<comment><USER51> Programming and graphic design perhaps (personally, I've yet to meet someone who programmed as a child who was better than a good programmer who learned later), but I really doubt there is much of an advantage to teaching your child Depth-First Search.

I don't really think CS is like learning a foreign language at all. The advantage for languages supposedly comes from the fact that we are hard-wired to acquire language at a specific age range ("Critical period hypothesis"). The biggest advantage is for infants, which steadily tapers off until puberty. I doubt we're hard-wired to acquire CS the same way - programming or theory.

<comment><USER50> The 'critical period' hypothesis is not the only theory and I don't believe its a useful one.

I think you're misinformed if you think brain development can be said to taper off in any way over 18 years. There is pretty clear evidence that it happens in distinct stages.

I think the real mechanism is that learning symbolic logic early causes a type of confidence that adults without find hard to acquire. Of course, my opinion doesn't really count here since my Karma is negative one now.

<comment><USER51> _I think you 're misinformed if you think brain development can be said to taper off in any way over 18 years._

That's not what I said, and the advantage you talked about supposedly does taper off until the child is around 12.

(edited for clarity)</comment></comment></comment></comment>


Show HN: Boldfaced, a portfolio designed for showing off writing - <AUTHOR>

I'm working on a new product for writers called Boldfaced. Its goal is to help writers of all kinds show off their best work, by giving them a great-looking portfolio designed for showing off the written word. If you're a writer, I'd love to have you get set up, and to hear your feedback. Longer term, my goal is to facilitate connections between great writers and great gigs.
Signup here: http://www.boldfaced.net/signup
Sample profile: http://simon.boldfaced.net/
Feedback: kyle at elepath dot com <comment><USER2> I like the name, the typography's decent, and I'm fond of that shade of green. The layout is very, very messy. It feels like a poorly-styled tumblelog, what with the huge emphasis on snippets and the constant centered-ness of everything.

For some reason, the linear display of one quote after another doesn't work for me at all. It feels loose. A portfolio should feel denser, like it's bursting with interesting things everywhere you look. But perhaps that's just the ugliness of the centered-quotes approach.

But seriously, rethink the quotes-only approach. Writing is about so much more than quick snippets. I know plenty of brilliant writers who would be grossly underserviced by this approach – Gene Weingarten and David Foster Wallace are two authors whose styles are drastically different but which are each difficult to "snippet" meaningfully. Your challenge, if you want to make a site like this, is to make a site that _respects_ writing, as deeply and as thoroughly as is possible without sacrificing snappiness and elegance.

That said, you're working on something that would make the Internet a better place -- oh wait! I just realized you're from Elepath! Is this an official Elepath project then? That's neat, and good luck to you and Jakob and the rest of the team.

<comment><USER3> >But seriously, rethink the quotes-only approach. Writing is about so much more than quick snippets.

I agree. When I read the blurb of the website, I thought "okay, it's a place to show off writing; awesome," and I was actually confused by the just-quotes format. Quotes do not make writing. I was hoping that clicking one of the quotes would bring me to an essay, story, or longer excerpt of writing, but no dice.

Many of the quotes on the sample page beg for context, and my eyes glazed over as I scrolled down the page.

Sure, the page looks neat at first glance, but I'm not really sure what this website is trying to achieve. I like to write poems and short stories and I am an avid reader. I don't really see one-line quotes as a way to show off that kind of work, and I wouldn't buy a novel based off one line. But perhaps I'm missing the point of the website?

<comment><AUTHOR> You're certainly not missing the point; the pull quotes clearly aren't cutting it. :) Going to spend the weekend reworking the way work is presented. Ideally I'd like to offer a few templates for work, such that the user can pick short/medium/long-form, or, perhaps make it based specifically on the category (poem, novel, tagline, etc.)

The intention of the site is to help writers show off work elegantly, though, seems I'm not quite there yet.

Thanks for the feedback!

</comment></comment></comment><comment><USER4> In my opinion, you should left justify the quotes, make the color of the quotes a dark body color, and then make the clients' names in the lovely shade of green.

When substantial text is centered, it does add emphasis, but it also reduces readability. When the entire page is centered, there's less readability but no gain in emphasis. And it is the same case, more or less, with color; a strong color is strong only in contrast to a more subtle color. The key is not to overload on strong elements (like alignment, text decoration, and odd fonts) while emphasizing which elements really need to stand out.

It does sound like a great idea!

<comment><AUTHOR> Appreciate the feedback!

</comment></comment><comment><USER5> Sound like a great idea, good luck!

I often read a paragraph or two from a book just to get the feel of it, so if your site would display those, people like me could use it as a sort of discovery engine for book or authors.

In terms of design - take a look at changemakrs.com, they're doing a good job at presenting content (quotes, in their case) in a very appealing way.

</comment><comment><USER6> I like the idea. Kind of like a dribbble.com for copy writers. I would use the site to look for a copy writer. Good luck!

<comment><USER7> Agreed. Designers have dribbble and developers have github. doesn't seem like there's a great place for copywriters to share copy snippets and discuss them.

I'd use a site like that to test early copy iterations pretty frequently.

<comment><AUTHOR> Interesting to hear!

</comment></comment></comment><comment><USER8> Sounds like wattpad.com</comment>


The New York Hustle of Amazon's Second Headquarters - <AUTHOR> https://www.newyorker.com/tech/annals-of-technology/the-new-york-hustle-of-amazons-second-headquarters <comment><USER2> For the nation as a whole it's a bad deal, in a prisoner's dilemma if everyone cooperates the payoff matrix is globally optimal. But for New York City it's a good deal, and those claiming otherwise refuse to look at the math and instead want to go with how the deal makes them feel.

$150,000 x 25,000 = $3.75B/year. At NYS + NYC effective tax rate of around 9.25% at that income level that's around 350MM in income tax alone. That doesn't include the taxes that Amazon itself will eventually pay, nor any of the knock on economic effects of injecting all that extra money into the local economy. For NYS and NYC this deal is a no brainer.

The federal government is _supposed_ to be the mechanism whereby coordination problems like this are solved. But the federal government (for a long time now, this isn't specifically about the current administration) if anything seems to want to encourage this kind of thing, not discourage them.

So here we are. You can rant and rave about the perfidy of actors acting rationally or you can work to change the rules of the game so as to produce an outcome you think more desirable. I know which one I think is more productive.

<comment><USER3> you make it sound like those numbers are completely comprehensive and without agenda, and that these subsidies are an unmitigated good. but they completely ignore jobs lost, companies shuttered, environmental impacts, and opportunity costs.

you're looking only at inflows and ignoring outflows. no systems dynamicist would take such an analysis seriously. systems have boundaries (by definition), and you must look at all traversals across the boundaries, not just the ones you like.

plus, you ignore the fact that amazon probably would have set up shop in nyc for far fewer, and probably even zero, dollars in subsidies. i.e., the same benefits without redirecting tax dollars to the already rich.

 _yes_ to more, _savvy_ economic development; _no_ to corporate giveaways.

EDIT: to your point about actors acting rationally, i would hope a group of business owners who don't get such subsidies put a bill before the people to either hold amazon accountable to promised performance or rescind/restrict the subsidies (or failing that, vote the bums out). the economic development program dollars they used should be directed toward entrepreneurs and small businesses, not mega-corps.

<comment><USER4> _" you ignore the fact that amazon probably would have set up shop in nyc for far fewer, and probably even zero, dollars in subsidies"_

Not a chance. Property tax incentives and subsidies are offered in all 50 U.S. states to encourage employer relocation. There is rampant competition.

<comment><USER3> but there is only one new york city.

<comment><USER5> As arrogant as this comment may sound, when you're talking about a facility like Amazon's HQ2, HN user "clarity" is right.

There really is only one place that combines a ridiculous amount of technology expertise, with an east coast location, and multi-modal transport links to both the US and the Europe-Africa side of the world.

But that's all the more reason that NY state did not need to offer that much in subsidies. (Again, I know they got a good deal, but not giving Amazon _anything_ would have been an even better deal.)

</comment></comment></comment></comment></comment><comment><USER6> The thing that seems the most interesting to me is the control over the financial narrative.

Here's a bunch of numbers, and if they add up to more than zero, we should do the deal.

There seems to be very little questioning of wether the accounting given is appropriate. What's the chance that Amazon would put staff in NYC even with no money? I'd say reasonable. Is anyone concerned about rising prices when 25k new high income people show up? Will they show up, or are they already there?

Plenty of things in the details can be challenged, I'm not saying I know the answer to any of these things.

But the narrative seems to be that there's these numbers, and they point to "we should do it".

Normally the only tax/subsidy I'm in favour of is externality related, eg Pigouvian. And I'm not seeing a lot of that argumentation here, though admittedly I'm not the keenest observer on this one.

</comment><comment><USER7> Has anyone seen specifics on how they'll be held accountable? They've made promises for x jobs with $y average salaries, but if they don't meet that, then what?

[https://ny.curbed.com/2018/11/16/18098589/amazon-hq2-nyc- que...](https://ny.curbed.com/2018/11/16/18098589/amazon-hq2-nyc-queens-long- island-city-explained) suggests that nearly $1.3 billion is not tied to any amount of job creation at all.

<comment><USER8> That article is an example of people not understanding what this deal is. Amazon is not receiving $3B in public dollars, they are receiving $3B in tax breaks. They are shifting a small % of that via PILOT and some other funding Amazon has agreed to.

I don't understand how people think this is in any way a bad deal for NY.

<comment><USER9> Tax breaks have a value, some might even say a cost.

</comment></comment></comment><comment><USER10> Eh. Everyone is acting like $3B is some massive some of money. The State of New York recently sealed a budget for ~$168B and and the economy of the state itself is somewhere around $1.2T. Hell, Amazon itself has a market cap of nearly 800B.

As of 2017, "[m]ore people are leaving the New York region than any other major metropolitan area in the country":

[https://nypost.com/2017/04/01/people-are-fleeing-new-york- at...](https://nypost.com/2017/04/01/people-are-fleeing-new-york-at-an- alarming-rate/)

So, 25k additional people is closer to stemming the tide of people leaving rather than overcrowding an already hot market.

<comment><USER11> The tide of people leaving because NYC is becoming completely un-afforable if you make less than 60k a year.

<comment><USER10> The median household income is $59k. It's not unreasonable that a large metropolis cost above average, given the higher population, while declining, still represents high demand for housing and local amenities.

</comment></comment></comment><comment><USER12> >> Throughout a bidding process that saw dozens of cities vie to be the next location of a proposed hydra-headquarters, there were murmurs that Amazon might really just be looking for a regular office, and rebranding it a "headquarters" to corner those tax breaks.

That is exactly what happened.

</comment><comment><USER13> Amazon was just looking to expand satellite offices, and used the HQ contest as a way to get free business info as to where to expand next. They were also looking for generous tax breaks to allow them to operate leaner in high COL high talent areas.

My guess is NY and NOVA areas were already being seriously considered and someone had the bright idea to turn it into a race to the bottom. Remember, as way back as 2016, Bezos was buying property in the DC area.

</comment><comment><USER14> We should ban these kinds of deals at the national level. They're rational for companies, and rational for regions, but overall they allow extremely large companies to avoid paying their share of taxes.

<comment><USER15> They do seem to open up a much more complex calculus in the tax system.

I think you can make an argument that these deals can improve efficient allocation of capital. But like credit default swaps and other complex financial instruments, I think you run into the issue of, is there a level of complexity that's just too much for the rest of the system to be rational around.

One of the purposes of tax structures is to allow people to make predictions about what the exact financial consequences of various choices they might make. If you add this kind of one-off negotiation into that, you undermine our collective ability to be rational about our financial choices.

However, if you allow this kind of negotiation, and you allow governments to try to compensate organizations for the systemic benefits they bring to an economy, that also has some utility. You can create an incentive to these organizations to create value outside of just their bottom line. And if we allow these kinds of deals, then over time we'll be able to systematize them and then eventually make them broadly available under standard terms.

So, I don't know. I'm not sure rushing to an outright ban is the way to go. But I do think there's some merit to the idea that in financial transactions there's a limit to how far the contracts can be recursive. Allowing it to be infinite makes for a chaotic fuzzy edge to the markets.

</comment></comment><comment><USER16> Being from New York and having followed this situation closely, I can say that this entire fiasco serves as a good example on how the politicians we elect _ought to_ protect their constituents from predatory corporate power.

However, this is not the case. Its mere political theatre as De Blasio and Cuomo pose for the cameras, as what matters is not the actual success they have achieved for the city in terms of job creation, but the _perceived_ success. That's how politics works. Otherwise some kind of protocol would exist to enforce, track and hold to account the job creation promises alleged by corporations or federal economic policies (NAFTA anyone?). How convenient that it does not exist. How convenient that we forget that as a private enterprise, Amazon has no obligations to the public.

The old tired adage "socialism for the rich, capitalism for the poor" sounds about right. Supporters of Amazon can work out all the math they want to try to convince others (and mainly themselves) of any public benefit. When taxpayer dollars are diverted to corporate welfare, that's when we, the public, get those austerity policies that we love so much. All in exchange for the 25k high-paying jobs not applicable to the working and middle class folks who in addition, will no longer be able to afford living there and will be forced out.

<comment><USER17> Isn't NAFTA pretty much very favorable to the US?

I agree with your sentiment that corporate welfare sucks and would have been much happier with the tax breaks being distributed to startups somehow, however, you're talking about LIC, where home prices already average above one million dollars.

Gentrification in LIC started a long time ago. These 25,000 people, many of whom will be hired from within the already vast tech talent pool, probably aren't going to drive prices up very much.

I think it really underestimates just how big NYC is to think such a thing.

</comment></comment><comment><USER18> I love living in flyover country.

<comment><USER5> I live in flyover country in Wisconsin. We still got hosed on our Foxconn "deal". Living in flyover country does not make us immune, we can fall victim to these deals as well.

</comment></comment><comment><USER19> The level of greed that Amazon and Bezos continue to demonstrate is sickening.

<comment><USER8> He's doing what most companies do: try to reduce their legal tax liability. If CEO's didn't do this, the boards of these companies would replace them with someone that will do it.

You are blaming Bezos and an entity for standard corporate fair. That's a symptom of the problem.

<comment><USER20> Still, it's a game that should be stopped. The federal government should stop things like this from happening, as it extracts value from local governments and gives it to corporations

<comment><USER8> It does NOT extract local value... it reduces Amazon's tax burden in exchange for high paying, highly taxed jobs. There's no money being paid to Amazon.

<comment><USER21> The state should appoint companies past a certain size a board member. It is not like taxes are unnecessary.

</comment></comment></comment></comment></comment><comment><USER22> Bezos played these cities like a fiddle. They'll never offer deals to him like this again but he doesn't care because this was a one-shot stunt.

Like sports teams, the impact on the local economies will be negligible. Lets see how many of the 25k jobs even show up...

<comment><USER23> There are benchmarks baked into the deal, so no jobs = no tax breaks. The cities should have known better than to play this game, but at least there's that.

<comment><USER22> Not true, only a portion is tied to job creation goals

<comment><USER24> It's tax breaks. If you don't employ enough people, you won't be paying enough taxes to take advantage of tax breaks anyway.

</comment></comment></comment></comment><comment><USER25> Amazon negotiated in bad faith and as such any deals should be voided. I'd like to NYC mayor call out Amazon instead of allowing the good people of NYC to be railroaded.

What the cities have submitted were nothing more than proposals, they are not contracts and are not binding. Considering the new information that has come to light mayor de Blasio.

More than anything Northern Virginia should withdraw their proposal, Amazon wants the Government cloud business so bad that Virginia has Amazon over a barrel.

<comment><USER22> Withdrawl would require politicians admitting they were duped. In NY, Democrats have a monopoly on power so they have no need to be responsive to voters.

<comment><USER26> Poppycock. One of the top stories from this election is how establishment NY Dems are facing a challenge from the left, e.g. Ocasio-Cortez who is critical of the Amazon deal.[1]

[1] [https://www.cnbc.com/2018/11/13/alexandria-ocasio-cortez- ama...](https://www.cnbc.com/2018/11/13/alexandria-ocasio-cortez-amazon- queens-hq-is-extremely-concerning.html)

<comment><USER27> Cynthia Nixon was also a thorn in Cuomo's side during the primaries, and much further left.</comment></comment></comment></comment>


Immutable annotations for Java - <AUTHOR> http://immutables.github.io/ <comment><USER2> It is fascinating to watch how both the java and javascript communities deal with the very different shortcomings of their respective programming languages.

It is also horrifying.

<comment><USER3> Mutability isn't a shortcoming. It's a feature.

<comment><USER4> Immutability isn't a shortcoming. It's a feature. :-)

<comment><USER3> Hold on to that thought. I'll check back in with you in, say, 5 years. By then, we should have all endured enough unnecessary pain to lurch back in the other direction. :)

<comment><USER5> We're well into the era where scarce computing resources no longer limits us the way they used to. We're over some kind of hump with regards to that. Since computing power is more abundant, the limiting factor we're currently running into has to do with the cognitive overhead incurred by our current tools, since tools always lag behind somewhat. Our current tools are primarily built to be efficient with machine resources, but are not necessarily built to make efficient use of cognitive resources.

As cognitive resources become the bottleneck, it's sensible to invest in tools that decrease cognitive burden. So we're seeing an upswing in popularity with methods and techniques aimed at limiting the amount of unnecessary, incidental complexity generated. "Easier to use" is nice, but "less complex" is imperative right now.

Immutability is one of those techniques that _can_ be leveraged to limit growth of complexity.

<comment><USER3> > _Immutability is one of those techniques that can be leveraged to limit > growth of complexity._

What you're saying is perfectly rational, right down to your emphasis on _can_. I don't take exception to immutability as one tool. My problem is with the notion that it is the _only_ tool and the corollary that mutability is _always_ wrong.

</comment></comment></comment></comment></comment></comment><comment><USER6> There's a very similar library from Google [https://github.com/google/auto/blob/master/value/README.md](https://github.com/google/auto/blob/master/value/README.md)

The one thing that tripped me up when I tried to use it is that you can't add other library annotations. For example, I couldn't change the json serialized field name using Gson's @SerializedName("custom_naming").

<comment><USER7> Maybe it's not what you looking for, but Immutables support binary [1] and JSON serialization [2] (Jackson or Gson) very well including field naming customization.

[1] [http://immutables.github.io/immutable.html#serialization](http://immutables.github.io/immutable.html#serialization)

[2] [http://immutables.github.io/json.html](http://immutables.github.io/json.html)

</comment></comment><comment><USER8> Hmm, this seems like a more heavyweight version of the immutable object support in Lombok [1], through the @Value and @Builder annotations. The website looks nicer than Lombok's, though :)

[1] [https://projectlombok.org/features/index.html](https://projectlombok.org/features/index.html)

</comment><comment><USER9> This kind of thing has worried me a little in the past (Lombok is a similar, but less focused project). My main concern is that this is not part of the pluggable annotations standard; it's an undocumented API provided by Sun javac. This means that it is prone to breakages, although I don't suppose it will particularly soon.

I know that Lombok had to change their code quite frequently to fit with different javac versions for a while, which means that this project becoming stale could be a problem.

<comment><USER10> Could someone elaborate on the downvotes? I'm not the OP, but this sounds like a valid concern.

What am I missing?

<comment><USER11> Perhaps because this project actually is using the Pluggable Annotation Processing API (e.g. [https://github.com/immutables/immutables/blob/master/generat...](https://github.com/immutables/immutables/blob/master/generator- processor/src/org/immutables/generator/processor/Processor.java)).

<comment><USER9> Yep, that's fair. I took another look, Lombok is only unsupported because it inserts methods into pre-existing classes; I misremembered the limitation on the pluggable annotations. My bad!

</comment></comment></comment></comment><comment><USER12> BTW, Java now has pluggable type systems. One of them[1] adds true static, compile-time checks for immutability, and allows method to specify that they only receive immutable objects.

There are many others, including tainting types, linear types, physical unit types and more.

[1]: [http://types.cs.washington.edu/checker- framework/current/che...](http://types.cs.washington.edu/checker- framework/current/checker-framework-manual.html#javari-checker)

</comment><comment><USER13> "the most full-featured and mature tool in this field!", "With Immutables you can generate state of the art immutable object and builder."

A programming library with copy that looks like it's written by a marketeer – well, why not, I guess :-)

</comment><comment><USER14> Neat. It would be interesting to see a comparison between this and FreeBuilder (as well as AutoValue, though I think the differences there are more obvious).

I'm all for tools that make immutability easier; the lack of immutable objects is one of my main sources of cognitive dissonance when programming in Go instead of Java.

<comment><USER7> Maybe it would not be an exhaustive comparison, but there's (biased enough) feature matrix of Immutables, AutoValue, FreeBuilder: [1]

[1] [http://immutables.github.io/CompareImmutables.pdf](http://immutables.github.io/CompareImmutables.pdf)

EDIT

</comment></comment><comment><USER15> What's the advantage of that as opposed to the 'standard' java way of doing immutable via 'final'?

<comment><USER16> These aren't immutable _variables_ , they're immutable (i.e. persistent) _data structures_. You can't directly change the objects themselves; instead, "setters" create a new copy of the object.

<comment><USER17> Perhaps I haven't had enough coffee yet, but could you explain how an immutable data structure is any different than an object whose class definition is all final? If you can't change any property of the object, wouldn't that be the same as what this annotation does?

To be clear, it seems like a nice boiler-plate avoidance technique (which Java could always use more of). But you're implying that there's some other significant underlying problem this solves and I don't see it.

<comment><USER18> Java doesn't have immutable collections in its standard library. If if a java.util.* collection is declared final, you can still modify its contents.

<comment><USER19> Actually, it does, but they don't have explicit types. See java.util.Collections.unmodifiableCollection(...), etc.

<comment><USER20> That still doesn't work all the way down. The objects you get out of the collection remain as mutable as when they were inserted.

Also, _unmodifiableCollection_ doesn't make the collection you pass in immutable; it creates a new object through which you can access it as long as you don't modify it. Anybody holding a reference to the original object can still change the object.

I think you can even somewhat break the collection by changing objects inside it if doing that changes their hashcode (for sets and dictionaries, such a change may have to reinsert the item in the collection to make sure that you can still retrieve it)

<comment><USER19> Right, but this project doesn't solve that problem, either. It wraps the underlying collection in a builder to make it less easy to access, but it doesn't appear that it places any additional restrictions on the types of members or collection elements (from the generated code on their site anyway).

If you weren't using this library, you could achieve something similar with, e.g.,

      someImmutableSet = Collections.unmodifiableSet(new HashSet<E>(someSet));

I think this library really is about making immutable objects accessible, i.e., taking away the boiler plate. Hand-writing immutable (and potentially mutable) implementations on top of interfaces for a whole set of DTOs is super annoying.

</comment></comment></comment></comment></comment></comment></comment><comment><USER3> One of the most frequently trumpeted cases for immutability is WRT thread safety. Is it me, or does this need come up rarely in practice _relative to the forcefulness of arguments to make everything immutable_? I get that it depends on your project, etc. But, I'm talking overall.

There are other benefits to immutability, to be sure, but I appear to be the rare voice that finds the dictum to "make everything immutable" to be overstated. And, we seem to ignore the code bloat that comes along with it-- builders and the like, as well as performance implications.

Of course we solve the challenges that mutability can introduce by lopping it off altogether, but at what cost? It's really not too far from solving problems that object misuse can introduce by getting rid of objects.

Replace all setters with builders, annotations, etc. Do not ever change an object's state. Ever! Run this Mutability Detector on your code to ensure you are not allowing something to be mutable. At all costs, kill those language features that allow object state to be changed!

At what point have we jumped the shark?

Maybe others believe in moderation as do I, and I just happen to be reading more of the forceful champions of immutability lately. But, they seem pretty loud and I have learned that edicts to never or always do something warrant great suspicion.

<comment><USER21> Some language features are just bad and should be removed entirely. Moderation is often the answer, but not always. [https://xkcd.com/690/](https://xkcd.com/690/) .

> Of course we solve the challenges that mutability can introduce by lopping > it off altogether, but at what cost? It's really not too far from solving > problems that object misuse can introduce by getting rid of objects.

At what cost then? I can point to specific scenarios where objects are useful and languages without them (e.g. Haskell) solve the problem less elegantly. Can you say the same for mutability? Have you got a specific business problem that you've solved with and without mutability and found that the mutability made it better?

(FWIW my position is: no unmanaged mutability beyond method scope. Local mutability is fine, but anything that crosses method boundaries should be explicitly managed using e.g. State)

<comment><USER3> FWIW if you advocate managed local mutability, then you also have folks who will tell you even that is evil. They would say internal mutability is still mutability. And, of course, it's true that you do also have to manage the same concurrency issues as with any mutability.

> _At what cost then?_

If a language offers a construct for achieving a certain goal, and you opt to bypass that construct to create a parallel construct, then you are necessarily creating additional cost. But, it's actually worse than that because it goes beyond creation of parallel constructs: it also includes working to actively suppress the built-in language constructs.

And now we are creating immutability tools and new annotations, and running Mutability Detection, etc. as if mutability itself is a defect and stamping it out automatically improves code quality.

> _Have you got a specific business problem that you 've solved with and > without mutability_

Yes. Every bit of code I've written before the age of Mutability-is-Pure-Evil. That code worked well without the additional code bloat, object copying, and performance penalties associated with defeating natural language constructs. No annotations. No builders everywhere. Just pure, clean, intuitive code whereby other developers were required to actually understand the design before using it.

You need to set a property? Then, set it. Don't construct a completely new object with a builder, just to update the zip code. In a multithreaded environment? Sorry, you need to understand concurrency issues. No amount of dumbing down objects is going to make up for your lack of understanding there.

Otherwise, let's stop calling immutability OOP. What people really want is to pass around a struct and have procedural code wrapped in other objects perform operations on it.

And, sorry. Moderation is key. Your use of "internal mutability" is actually a nod to moderation. When people find themselves repeating that something is always evil, it should trip a mental alarm. Sure, there are cases wherein immutability might be a reasonable way to solve a problem, but definitively stating that it is always the right approach is shark-jumping.

<comment><USER21> > And, of course, it's true that you do also have to manage the same > concurrency issues as with any mutability.

No, it's not. I'm talking about within a single method, which inherently means belonging to a single thread.

> But, it's actually worse than that because it goes beyond creation of > parallel constructs: it also includes working to actively suppress the > built-in language constructs.

Again, some language constructs are just bad. E.g. I believe Gosling has said he wishes he never put checked exceptions in Java.

> You need to set a property? Then, set it. Don't construct a completely new > object with a builder, just to update the zip code. In a multithreaded > environment? Sorry, you need to understand concurrency issues. No amount of > dumbing down objects is going to make up for your lack of understanding > there.

On the contrary, more restrictive models really are easier to understand.

<comment><USER3> > _I 'm talking about within a single method, which inherently means belonging > to a single thread_

If your method is modifying data non-atomically, then you can still have issues with data consistency when another thread attempts to access the object in the middle of your update. You're going to need to synchronize access in some manner.

> _Some language constructs are just bad...checked exceptions..._

Checked exceptions are not an integral part of OO design. Objects, along with the concept of properties (i.e. state) are.

> _more restrictive models really are easier to understand_

That's simply not a universal truth.

<comment><USER21> > If your method is modifying data non-atomically, then you can still have > issues with data consistency when another thread attempts to access the > object in the middle of your update.

Externally-visible data should not be mutable.

> That's simply not a universal truth.

Let's talk specifics then. My preferred model is: every piece of persistent (beyond a single method scope) mutable state is owned by an actor, and accesses to that state are performed by sending State values to that actor and receiving values back. The type system enforces that any state modification happens in the appropriate actor; since State is an ordinary value you can refactor safely without worrying that you're changing concurrency boundaries. Monadic syntax (for/yield) makes it easy to compose state changes that should happen atomically, and since the call to actually perform the modification is explicit, it's easy to see which changes are atomic and which are not.

<comment><USER3> > _Externally-visible data should not be mutable._

This doesn't automatically solve the problem. If two threads invoke methods which mutate (or read) the internal state, then inconsistencies can result if not properly synchronized.

> _Let 's talk specifics_

You originally stated that more restrictive models are easier to understand. My point is not that they never are (as in some universal truth). It's that the real answer is that it depends. And, in the context of this discussion, simply declaring that the restrictions that immutability imposes are automatically beneficial to understanding is a non-sequitur.

But, WRT to the specifics you provided, your model may indeed provide structure that can aid in understanding the code. But, I don't think it's the degree of restrictiveness that determines this, as much as that there is _some_ model in the first place. Of course, whether it's the best choice in a given situation is a relative proposition.

Interestingly, however, you allow for mutability. And the real "magic" is happening not through immutability alone, but careful assignment of mutability operations _in conjunction_ with other concurrency idioms that you expect to overlay atomicity.

So, essentially we agree: declaring mutability as the root of all evil is overkill. Instead, the real prescription relies upon carefully considered/managed mutability, used with the language's intended concurrency features.

</comment></comment></comment></comment></comment></comment></comment><comment><USER22> In my experience, Immutables really helps address some of Java's verbosity problem. Introducing it into my project cut 2,500 LOC (~10% of total code base), [https://github.com/glowroot/glowroot/commit/7bdd3ff](https://github.com/glowroot/glowroot/commit/7bdd3ff)

</comment><comment><USER23> If this is useful to you, check out the Mutability Detector ([https://github.com/MutabilityDetector/MutabilityDetector](https://github.com/MutabilityDetector/MutabilityDetector)).

</comment><comment><USER24> Scala, is that you?? :)

<comment><USER25> val immutableString = "foo"

val immutableList = List(1, 2, 3)

val immutableMap = Map("foo" -> "bar")

var mutableString = "foo"

val mutableList = collection.mutable.List(1, 2, 3)

val mutableMap = collection.mutable.Map("foo" -> "bar")

<comment><USER26> No, this is not the same as the linked library. See here: [http://stackoverflow.com/questions/6425165/statically- decide...](http://stackoverflow.com/questions/6425165/statically-decide-if-a- scala-class-is-immutable)

A similar example in Scala would be a class that has only 'val' types and no 'var' types, but read through the stackoverflow post to see the complexities.

<comment><USER25> case class Foo(bar: String, baz: String)

<comment><USER12> Or in Kotlin:

        data class Foo(bar: String, baz: String)

</comment></comment></comment></comment></comment><comment><USER27> Features: [...] MongoDB Integration.

WAT

</comment><comment><USER28> So, I work at a company that uses Java for all its server-side technology (~2 million lines today), but we don't use annotations for code-gen. Can someone explain to me why I would want to do that instead of a hypothetical IDE feature/plugin?

<comment><USER29> Assuming you don't use annotations at all...

* DRY for cross-cutting concerns, like database transactions, logging, dependency injection, serialization, validation, web controllers/endpoints... basically, macros for Java.

* Less code means less chance for error - even if that code was generated at some point in the past, it will need to change in the future, and the future developer may do the change manually and might introduce mistakes. Using annotations can help enforce patterns.

<comment><USER28> We use annotations for some things, but they're either used at runtime for configuration or things like the lovely @Deprecated.

<comment><USER29> Another advantage of using annotations to generate code at compile time, is that any (simple) errors get detected at compile time instead of runtime. So, potentially less tests you need to write.

</comment></comment></comment></comment><comment><USER30> immutability is some clear gap in java, but I'm curious on what immutable has that checker framework [1] doesn't.

Looks like immutables transform the code in even more spaghettis.

Just looking at the "get started", it looks like the author voluntarily ignores all the java conventions around variables and getters/setters.

I might be wrong on this, but I suspect this framework heavily relies on introspection, which in my experience has always led to very hard to debug and explore code.

[1] [http://types.cs.washington.edu/checker- framework/](http://types.cs.washington.edu/checker-framework/)

<comment><USER7> >> what immutable has that checker framework doesn't.

Functionality overlap is not particularly clear with Checker framework, in fact Immutable users often use Checker framework also. There are other tools like AutoValue, FreeBuilder, Lombok where I can see more similarities, but with important differences.

>> Looks like immutables transform the code in even more spaghettis.

I would not agree, but you should look at real world codebases like [1] or [2] which use immutables.

>> Just looking at the "get started", it looks like the author voluntarily ignores all the java conventions around variables and getters/setters.

Immutables support getters convention and you can configure any other convention you have, see [3].

>> I might be wrong on this, but I suspect this framework heavily relies on introspection, which in my experience has always led to very hard to debug and explore code.

Immutables uses standard APIs of annotation processing. You can take a look at example generated code [4].

[1] [https://github.com/facebook/buck](https://github.com/facebook/buck)

[2] [https://github.com/glowroot/glowroot](https://github.com/glowroot/glowroot)

[3] [http://immutables.github.io/style.html](http://immutables.github.io/style.html)

[4] [http://immutables.github.io/generated.html](http://immutables.github.io/generated.html)

</comment></comment><comment><USER31> I tried to use annotation processors, but they were very IDE-unfriendly. According to the linked user guide it's better now. It's an interesting alternative to runtime bytecode generators or proxies.

</comment><comment><USER32> That's easy to do with Roslyn analyzers in C#.

<comment><USER33> ...or just waiting for C# 7.</comment></comment>


Swedes say no to Google Apps for government use - <AUTHOR> http://gigaom.com/2013/06/13/swedes-say-no-to-google-apps-for-government-use/

<comment> T-A The last sentence in the article, "shows the need for more infrastructure catering to the needs of smaller populations — say, for the European Union" reminds me of a common US-centric misconception. Almost 500 million people live in the European Union, 740 in Europe including non-EU states, vs 314 in the US. A loss of trust in US-centric infrastructure could be an opportunity for providers catering to the needs of _larger_ populations.

<comment><USER2> Except the policy discussion takes place in the country scale not the territory scale.

</comment></comment><comment><USER3> We are (in most of the world) in a very unbalanced situation. Most of the state of the art technology is run by US companies. Thus the whole world (actually, those using services provided by those companies - i.e. nearly everybody) is being spied. US citizens and companies are also being spied, but here comes the unbalance:

The US government can use that information for bad or good purposes. This applies to information about US citizens and other citizens. It is easy to see why the US government would use that information for good purposes (like say, prevent a terror attack) for US citizens. (proably bad things will happen to US citizens too, like imprisonments for political reasons)

But it is _very_ difficult to see why the US would do anything good for foreign individuals / corporations (unless we accept that the US is the world government, and has the interest of all of us in its heart, which is ludicrous).

So here we are: a government taking advantage of the technology developed by (mostly, but not only) US companies, to further a political agenda.

I expect global boycott of US based cloud providers. It does not make sense anymore. This is a trust which can not regained, since we have seen the tactics involve flat lying - even legislation to force companies to lie.

<comment><USER4> You are right, but the newly revealed indices suggests that your personal data are not collected primarily from the cloud providers after they arrived to the destination (like the spy agency would enter the Gmail repository through a backdoor and vacuum out all the data), rather, the whole (or most of) Internet traffic is monitored on the main routers and everything collected. Only thing which is not yet clear (at least to my knowledge), how much is this being done outside of U.S.

From this perspective, boycotting US based cloud providers is probably a reasonable thing to do, but it is not clear if this will results in less of your personal data being collected, if you just switch the provider. For example, I noticed it is now popular to switch from Gmail to other providers like fastmail.fm - I'm really not sure if this would be helpful at all.

<comment><USER3> Sure, but:

a) nobody is doing this in the same scale as the US, and nobody has the means to do it (except maybe China)

b) If I live in Sweden, and the Swedish government is snooping on me, I get both the good and the bad of it. If the US is spying on me, I only get the bad.

</comment></comment></comment><comment><USER5> They're also not allowed to use US-based spam/malware filtering could-style services, since that also means that the emails are sent to places where integrity can't be guaranteed.

</comment><comment><USER6> They'd be mad not to forbid this, given that there's apparently no legal impediment to the US Government accessing non-citizen non-residents' Google accounts for the purpose of industrial espionage or political dirty tricks.

</comment><comment><USER7> Sweden used to be self-sufficient enough to build their own cars, fighter jets and submarines. Let's hope we can tackle computing for this century.

<comment><USER8> Last I checked Volvo is still building cars. The swedish Air Force most modern plane is JAS Gripen [https://en.wikipedia.org/wiki/Saab_JAS_39_Gripen](https://en.wikipedia.org/wiki/Saab_JAS_39_Gripen) . The status on submarines is unknown to me though.

<comment><USER9> Swedish submarines are ok...

"Gotland managed to penetrate the defensive measures of Carrier Strike Group Seven undetected and snap several pictures of the USS Ronald Reagan during the December pre-deployment Joint Task Force Exercise 06-2 (JTFEX 06-2) in the Pacific Ocean (probably in the California Operating Areas), effectively "sinking" the aircraft carrier.[10] The exercise was conducted to evaluate the effectiveness of the US Fleet against modern diesel-electric submarines, which some have noted as severely lacking.[11][12]"

[https://en.wikipedia.org/wiki/HSwMS_Gotland_(1995)](https://en.wikipedia.org/wiki/HSwMS_Gotland_\(1995\))

</comment></comment></comment><comment><USER10> I wonder if this is also why Google has a special "Apps for Government", to not be included on the general public's servers.

<comment><USER6> It wouldn't make any difference though - as long as Google is running the service, it can be reached by a FAA 702 request.

</comment></comment><comment><USER11> This is common sense, not news..

<comment><USER12> Disgree.

Do you live somewhere where common sense is common?

<comment><USER13> The PUL (swedish privacy law) restricting where and how you can store information about citizens is quite famous (infamous?) among swedish technologists. Which is not saying that you're wrong, I wouldn't expect non- swedes to be familiar with it.

But still, isn't it sensible for the government to keep internal information within the national borders?

</comment></comment></comment><comment><USER14> What's stopping the NSA from installing beam splitters outside of the US? The whole thing sounds like the anti-Japanese paranoia from the 1980s.

<comment><USER3> The NSA is not almighty. It has lots of resources, and the US can put lots of pressure in lots of places, but there will always be places out of reach. Thanks to whistle blowers we can get to know which places have fallen under US power, and route around that.

We can safely assume the whole US is not safe, because _legislation_ forces companies to comply (or go to jail). Outside the US, not so easy.

<comment><USER15> The US has a nuclear submarine that was apparently modified to allow tapping of undersea communications cables:

[http://en.wikipedia.org/wiki/USS_Jimmy_Carter_%28SSN-23%29](http://en.wikipedia.org/wiki/USS_Jimmy_Carter_%28SSN-23%29)</comment></comment></comment>