Lawyers said Bush couldn't spy on Americans. He did it anyway. - <AUTHOR> http://www.washingtonpost.com/blogs/wonkblog/wp/2013/06/27/lawyers-said-bush-couldnt-spy-on-americans-he-did-it-anyway/?tid=rssfeed

<comment><USER2> What is even worse is that the next president - who taught constitutional law for more than a decade - cannot see the problem with his government spying on everybody.

<comment><USER3> My wife mentioned this in the car yesterday, and I think its apt. Bush was an MBA. He didn't care about the law, he just ignored it. Obama is a JD. He does care about the law, but he's also willing to entertain legal positions that make fine distinctions to go right up against what the law allows. The public, however, can't really tell the difference. To them (the subset of them that care at all) the legal distinction between collecting data and collecting metadata or targeting only non-U.S. persons doesn't resonate, and they can't see the difference between what Obama is doing and what Bush was doing.

<comment><USER4> It seems to me like the distinction between someone who outright lies to you and one who omits the truth. Neither are a quality I want in a President.

</comment></comment></comment><comment><USER5> That's right, it's still Bush's fault.

We're in Obama's 2nd term, this is getting old.

<comment><USER6> It started under Bush, so this is one instance where I think they are right. However, I blame Obama more because he was supposed to do the opposite.

<comment><USER7> Are you sure it started under Bush? Accusations that Echelon was being used for industrial espionage date back to the 90s.

This is relevant because a creeping erosion needs to be fought differently than something that had a distinct event that caused it.

</comment></comment></comment><comment><USER8> New strategy: Make it about Bush. Obama is at least as culpable b/c he would have had a good excuse to raise a red flag about the improprieties upon taking office.

<comment><USER9> I suspect that Obama may actually be more culpable. But I can't read an article in a major US newspaper about the legal opinions in the Obama white house, so I can't start excoriating him for ignoring (and overriding) legal council. I can (and hereby do) excoriate him for conducting the least open and transparent white house I have experienced. As certain top politicians have pointed out[1], this is a terrible way to run a government.

[1] [http://www.whitehouse.gov/the_press_office/TransparencyandOp...](http://www.whitehouse.gov/the_press_office/TransparencyandOpenGovernment)

<comment><USER10> Spying-While-Black?

</comment></comment></comment><comment><USER11> This is why transparency is essential to the processes of government. Without it, the powers that be can increase their authority unchecked. Concerns over national security should come second to whether or not government is truly acting in the best interests of the public. There are tradeoffs for security, but privacy should not be the price we pay to remain "free."

<comment><USER12> hence the whistleblowers

</comment></comment><comment><USER13> For someone who surrounded himself with lawyers who thought it was legal to crush children's testicles to extract information during enhanced interrogation [1], I find this particularly upsetting.

[1] [http://www.revcom.us/a/026/torture-victims-confront- advocate...](http://www.revcom.us/a/026/torture-victims-confront-advocate.htm)

<comment><USER14> It's a sticky question how much Congress can restrain the President when executing his war powers. Obviously such an action is morally abhorrent, but some might argue that so is dropping an atomic bomb among a civilian population. Could Congress, had it been so inclined, have passed a law to prevent Truman from doing so? I don't know the answer, and I'm not sure you do either.

Who we elect President matters. This is one reason why.

<comment><USER15> Don't congress need to actually declare war before the President gets to execute war powers?

Congress hasn't declared war in ages.

<comment><USER3> The only thing the Constitution says about the subject is that "Congress shall have the power to... declare war." It doesn't give a specific format for an "official declaration of war" or anything like that. Congress hasn't declared an official war since World War II, but the actions in Iraq and Afghanistan were backed up by Congressional resolutions authorizing force against those regimes. Congress never declared war against Tripoli during the Barbary Wars (just 12 years after the signing of the Constitution) so at least historically it doesn't seem like the founding generation believed it necessary to pass some "official declaration of war" in order to signal Congress's approval for the President to execute war.

<comment><USER16> But previously, war meant some clear and present enemy like "Japan" or "Germany". Now the president has been given almost carte blanche access to fight a war on "Terror", a term so nebulous as to allow the president the right to do whatever he wants including spy on American citizens. While it's true Congress gave the president the ability to fight a War on Terror (or drugs or unicorns or whatever), it's the Congress who should be reining in that power when it gets out of hand. Instead they sit around and collect their checks.

I'm not as worried about an "official declaration of war" since the Constitution isn't clear on that need. I do wish Congress would grow a set of balls and do what's necessary to rein in presidential power regarding a ridiculous war on something we can't even see, much less defeat.

<comment><USER3> During the Iraq and Afghanistan wars, Congress authorized the use of force against the Iraqi government, and Al Qaeda and agents of Al Qaeda. I don't see how the latter is any more nebulous than Congress's authorization of force against the Barbary pirates in 1801.

<comment><USER16> I'm not talking about those wars. I'm talking about the War On Terror which was the genesis for spying on Americans. We don't have a war on Al Qaeda, we have a war on Terror. It doesn't get anymore nebulous than that. Neither Bush nor Obama would stand before the American People and say that the authorization of force in Iraq justified a sweeping surveillance program that includes American citizens. But the War on Terror enables them to do exactly that because of its murkiness. I don't blame either Bush or Obama for taking advantage of the power vacuum left by Congress in the War on Terror. I just wish Congress would take some of that power back.

</comment></comment></comment></comment></comment></comment></comment><comment><USER17> It seems like the law enforcement/spy agencies modus operandi: do it illegally for a few years, and during this time lobby Congress and the president to make it "legal".

Then, in case anyone catches on to what they were up to and sues them, lobby Congress to give them all immunity for their previous illegal activities.

Rinse and repeat. Nobody ever gets punished, and their imagination to what they can achieve with technology is the only limit, because they can set up whatever misleading legal structure around it to justify their actions, after the fact.

It seems pretty clear that they have absolutely no respect for the _spirit_ of the law anymore, and they're always seeking for loopholes and twisted interpretations of the law (that they keep secret) to allow them do what they want.

> After more than a decade, opponents of Bush's surveillance programs have > still not had an opportunity to challenge them in court

And this is why America needs a Constitutional Court (not secret) to add another check on the government's power and stop them from passing unconstitutional laws, that can only be verified for constitutionality 10-20 years later, and ruin some people's lives in the process, while growing a monster for decades.

<comment><USER18> _And this is why America needs a Constitutional Court..._

While avoiding broaching the interminable debate on whether or not they're, you know, _actually doing their jobs_ , I thought that was the very definition of SCOTUS.

EDIT: I'm avoiding that debate because ISTM that one's position thereon is most likely a function of their _politics_ , and not of whether or not the sitting justices — let alone the institution, itself — are an adequate implementation of the thing they were intended to be by Article III.

<comment><USER19> The fact that courts can declare laws to be unconstitutional is a hack out of Supremacy clause, as decided by the SCOTUS itself in one of the early cases. All other rules still apply, such as proving your standing for harm, which you cannot, if the executive keeps everything secret.

A proper constitutional court (as implemented by many other countries) is much more suited to these kinds of cases, which concern the spirit of Constitution, rather than specifics of harm and injuries to one specific entity.

<comment><USER20> the case the parent refers to is Marbury V. Madison, where SCOTUS assumes the ability to interpret matters of constitutionality.

</comment></comment></comment></comment><comment><USER21> The legalistic bickering in this thread is like a debate among frogs as to the constitutionality of their being placed in to a pot of boiling water.

</comment><comment><USER22> I can tell this is getting serious by the increasing number of articles mentioning "Obama" or "Bush" in the headlines. Now is the time for the blame game to begin!

I've said it before, and it bears repeating: this is a systemic problem. The system is set up so that it is so secret there can be no public oversight. There's no feedback loop. The most you could ask from any president is simply to air it all out in the open and let the public begin a debate. This is something that no president has done so far. I wouldn't hold my breath waiting on it to happen, either.

I'm willing to cut Bush a _tiny_ amount of slack for historical reasons. The US has traditionally temporarily restricted liberties and trampled on parts of the constitution when it was under attack. Therefore, looking at 9-11, there's no reason not to expect the pattern to continue.

The problem here is the word "temporary". 9-11 wasn't just a terrible tragedy that opened a huge war effort that lasted several years and ended. It was used to create _permanent_ changes in the way the entire system worked. In that area -- making it all permanent -- I completely blame Bush and the Congress, neither of which could have fucked things up this much by themselves.

Obama walked into a mess, but he seemed to know he was walking into a mess. Why he didn't actually fix anything is anybody's guess. I'm not buying that he couldn't do it. I just don't know.

I don't want to put the paranoid hat on, but I would note that members of various military agencies have been known to thoroughly "research" Congresspeople and executive branch staff in order to know how to pitch them on various issues. I firmly believe the NSA did not do this, but with all of the revelations lately, it's not beyond the realm of possibility. Can you imagine how persuasive and argument you could make to a Senator, or even a President, if you had all their emails, chat logs, cell phone records, and so forth? Like I said, I don't think it happened. But it _could_ happen, and that's freaking scary.</comment>


Less is Exponentially More (2012) - <AUTHOR> https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html <comment><USER2> Rob Pike's confusion about why C++ programmers didn't want to move to go is partially explained by his focus on a particular problem domain at the time Go was being developed. Google in those days was primarily concerned with writing highly concurrent request processing software, and at that time the vast majority of that software was written in C++. Writing highly concurrent C++ in the days before the language had things like lambdas, std::function, std::future, etc was definitely gross. In practice, a lot of the concurrent C++ code from that time period took on the callback-hell flavor of node.js code, but without the concise nature of JS. It was gross.

Go is _obviously_ a superior language to C++ for writing concurrent programs in every way except possibly when you need to achieve maximum possible throughput (as in google's search clusters) or minimum possible latency (are HFT shops switching to go? I honestly don't know). However, outside of a few companies that have huge capacity problems, people weren't writing concurrent request serving programs in C++. They were using Python, Java, etc., and later, Node.js. So its no surprise that people flocked to Go from those languages and not C++, because there wasn't a huge population of C++ programmers in this problem domain looking for a better language in the first place.

The other C++ programmers were down the hall, working on Chrome and Android (which has a ton of C/C++, despite Java being the primary app development language). The reason they didn't, can't, and won't switch is that managed languages like Go are not well suited to highly resource constrained environments like phones, or browsers that are supposed to run on win XP machines. (To say nothing of games).

The advantage of C++ is not, as Pike pompously suggests, that C++ programmers have too much fun playing around with templates and other navel-gazing pursuits. The advantage is that it is a high-level language that lets you do what you need to do with very, very close to the minimum possible resource usage. And there are programming environments where that really matters, and those environments are never going away.

<comment><USER3> Being a C++ dev, I think you're on-point about the reason people still choose C++ but my suspicion is that it part truth, part group-think and it won't really hold out.

I could be totally wrong, but have you had to optimize a tight loop in C/C++? It sucks and a lot of stuff is missing : simd, likely/unlikely branches, the compiler has a lot of trouble knowing when lines of code are independent and can be done in parallel (b/c const =/= immutable), in-lining can't be forced when you _know_ it gives better performance (if you use GCC extensions you can alleviate a lot of this..but that's tying you to a compiler). Yeah C++ is generally faster than Go, but there is a lot of performance typically left on the table. The language kinda start to work against you when you start to dig down. So you slap some shit together and the compiler will do a decent job, but most C++ devs aren't even looking at the compiler output

But the elephant in the room is that more and more of our available flops are on the GPU and C++ isn't helping you there at all. Not only that, but the GPU is giving you way more operations per Watt (and that's what a lot of those people care about). And finally, when you throw stuff onto the GPU you are also leaving the CPU available to do other things. So there are a lot of "wins" there. As you illustrate, the areas of C++'s relevance is shrinking, and shrinking into the area that is very GPU friendly.

So the way I see it, C++ folks will start to write more OpenCL kernels for the performance critical pieces and the rest won't matter (Go or Clojure or whatever). The GLSL is kinda lame and too C99ish... so maybe someone will write a better lang that compiles to SPIR-V, and it's not exactly write-once- run-everywhere, but it _could_ be much better than writing optimized C++ and it can run everywhere. It's more of the cross-platform-assembly C/C++ wants to be

<comment><USER4> > SIMD

Intrinsics are directly callable from C++.

> likely/unlikely branches

Most compilers have extensions that will allow you to do this (__builtin_expect and so on).

> in-lining can't be forced when you know it gives better performance

Again, most compilers have this, not just GCC, e.g. __forceinline.

> the compiler has a lot of trouble knowing when lines of code are independent > and can be done in parallel (b/c const =/= immutable)

This is true, as aliasing is a real issue. The hardware itself has some say over this anyway, dependent on its instruction scheduling and OOE capabilities.

What you don't mention, however, is the fact that almost no other languages offer any of these, let alone all of them. Rust may be the exception here, although some of this is still in the words (SIMD, I'm not sure about the status of likely/unlikely intrinsics).

For GPU programming, if you're using CUDA, you're almost certainly using C or C++, or calling something that wraps C/C++ code. Not everything is suited to GPU processing anyway, there's still a lot of code that's not moving off the CPU any time soon that needs to be performant.

<comment><USER3> right, so things that are not part of the language, not crossplatform and not crosscompiler. That's called fighting the language in my book :)

I'm not saying you can't get C++ to output the assembly you want - it just sucks trying to coerce it to do things that are honestly not that complicated. And even when you do get what you want you find you can't use the code anywhere else. To me that feels like a language failure...

> is the fact that almost no other languages offer any of these

I guess you missed my point. It seems to me that we're at a point where you no longer need these features as part of your core application language. The idea is that with OpenCL/SPIR-V we'll be able to

1- be more explicit and not fight the language (so even if you're 100% on the CPU it makes sense)

2- target every platform (you can finally write code for your GPU)

3- can be called from any parent language

You're right that not all performance critical problems boil down to tight shared-memory loops that can be thrown onto an OpenCL kernel - but my experience so far tells me that that's the vast majority of performance problems. So C++'s usefulness will shrink. But maybe my experience is biased and I'm off base. I haven't done much OpenCL myself - but I'm definitely planning to use it more in the future

<comment><USER5> > right, so things that are not part of the language, not crossplatform and > not crosscompiler

You just have a header with different #defines for the different platforms you are going to ship on, or use a premade open source one.

If you want to ship on everything, you won't get full optimization stuff everywhere. It would be better if some of these features were in the standard, but in practice it isn't such a big issue for those two in particular.

</comment></comment></comment></comment></comment><comment><USER6> Huge caveat: This article was written in _2012_. So do yourself and fellow reader a favor and not argue over content that is now six years-old.

Obviously, Go has not replaced C++ usage. And, these days, I would see Rust as the more likely step from C++.

(Although, I still feel that it remains to be seen whether Rust will make a huge dent there; is memory-safety the killer-app feature that makes people want to use Rust? Do enough people feel that they Need To Use Rust to make it stick? I'm interested to see how that plays out.)

What Go has done, I think, is replaced interpreted language use (PHP, Python, Ruby) in backend code. Which makes sense, to me--those are already GC languages, so you're pretty familiar with the lay of that land. Generics may not make a huge deal for you because there were no generics to use in those other languages. And Go is quite a bit faster than any of the aforementioned interpreted languages.

<comment><USER7> > What Go has done, I think, is replaced interpreted language use (PHP, > Python, Ruby) in backend code. Which makes sense, to me--those are already > GC languages, so you're pretty familiar with the lay of that land.

One of the less talked about reasons Go is successful at replacing these languages is the devops story - essentially no runtime dependencies.

<comment><USER8> This can be easily done in C and C++, by static linking. In java, by building custom jars. This is in fact common practice in large companies, for exactly the reason you mention.

<comment><USER9> It cannot be done as easily with interpreted languages (Python, PHP, Ruby, Node.js), though--and those are precisely the languages from which Go has been stealing users.

<comment><USER10> Vendoring in your dependencies is definitely not hard in a dynamic language, just for some reason most projects never bother. I doubt it's a significant reason why they've been moving to Go.

I think it's more prosaic reasons, like that's the language their job uses. People who use dynamic languages tend not to think of themselves as specialists in their stack.

<comment><USER9> > Vendoring in your dependencies is definitely not hard in a dynamic language, > just for some reason most projects never bother.

Not to take a side in static-vs-dynamic linking or the language argument, but that is absolutely incorrect. Single-static-binary is a very significant reason for lots of people moving to Go: that, plus a good cross-compilation story make a lot of problems go away.

Vendoring dependencies is hard in general. It's _much_ harder in dynamic languages.

Some evidence/examples:

\- Look at how many different ways of packaging things that Python has.

\- Ruby, which most people consider to be one of the scripting languages that got vendoring right out of the gate, still struggles with system libraries used to bootstrap the Bundler process on deployment targets.

\- Node.js, another one which is considered to have gotten vendoring right out of the gate, has massive problems with its implementation: package assets in node_modules take forever to fetch/inflate deployment times and artifact sizes, and put strain on systems. People argue that the difference between "my node_modules directories have so many files I ran out of inodes" and "my golang binary is really big" is just a difference of degree, but it's a _big_ difference regardless.

\- Vendoring/deploying compiled/native dependencies are a massive hassle in dynamic languages as well: better make sure that you compiled those deps in a way compatible with your target system (a big hassle if you are, say, building an old Perl C/XS extension on OSX and targeting Linux for deployment), and make sure they all link correctly once there, and, if they link, hopefully they link with system libraries that don't have behavior differences from wherever you tested the code. And a _lot_ of popular libraries have a native component.

\- There's also the problem of dependency resolution. Several dynamic languages have hard-coded system library paths, which means that if your vendoring misses a spot, you might be loading an unexpected version of something, or failing to start. The "just put everything in the system lib path" ignores the reality of multitenant/multi-use systems, and as a whole 'nother piece of expertise.

\- The popularity of Docker/containers is largely driven by the fact that they let you "statically link" your whole stack. That demand indicates that some folks, at least, found the vendoring story for dynamic languages difficult.

> People who use dynamic languages tend not to think of themselves as > specialists in their stack.

This sounds suspiciously like "if you use $language you're an idiot/inferior". Spare me your arrogance and language elitism, please. There are specialists, generalists, experts, and idiots on every platform ever invented--in very, very similar proportions.

</comment></comment></comment></comment></comment></comment><comment><USER11> > C++ programmers don't come to Go because they have fought hard to gain > exquisite control of their programming domain, and don't want to surrender > any of it. To them, software isn't just about getting the job done, it's > about doing it a certain way.

For the first time, I think I'm motivated to learn Go. My big beef with C++ is there's no simple mode. Every single decision ever made in the syntax and libraries is geared for only the most complicated, high performance needed situations.

My problem is that 90% of my C++ code doesn't need performance at all, and could be Python for all I care.

To be fair, some of the modern changes are bringing some simplicity back. But, it still feels like wading through mud to write what should be easy things like file i/o, compared to Python or JavaScript. Using hashes and mixing hashes with other containers is so verbose and nit-picky in C++ compared to today's scripting languages that I just long to mix languages most of the time I'm writing general C++.

<comment><USER12> There is easy mode. It is called C. I am not trying to be flippant. A lot of people started in C++, writing essentially C code and then going to classes, inheritance, templates, wider usage of standard library and boost, little by little.

<comment><USER13> But you're not supposed to program that way in C++ at all. Ask a veteran C++ programmer, and they'll tell you that buck n00bs should start out using the STL, smart pointers, and generic algorithms, make sparing use of inheritance, and never touch bare pointers.

<comment><USER14> This former buck noob took about three months to get to that exact place, because C++ is literally a messy archaeology of random CS ideas, and the guiding philosophy seems to "shovel these funky features in, maybe someone will use them."

Beginner books meanwhile will be five, ten, or fifteen years out of date, and reliably give you a correspondingly wrong view of current best practices.

At this point C++ is almost an oral tradition. You _need_ someone who knows what they're doing to tell you which books to read and which parts of the language to ignore.

It's horrendously difficult to learn if you do the usual thing and try to self-teach - and needlessly so, because the core of the language isn't that complex.

</comment></comment></comment></comment><comment><USER15> A counterpoint is that more can be simpler when it allows better abstraction.

For example, calculus is more complicated that arithmetic and algebra. However, calculus can unify and show relations between different algebraic representations. For example, when I learned physics in middle school, I thought that remembering

delta position = velocity * time

but struggled with

delta position = initial velocity * time + 1/2 (acceleration * time^2)

When, I learned about derivatives and integrals, the formulas all made sense.

In my opinion Go suffers from the ability to abstract which is most represented in its lack of generics. Instead, of being able to represent operations in a generic way, you are forced to cut and paste, and cannot express the relationship accurately, much as how I considered the relationship between acceleration and position to be opaque before I understood calculus.

<comment><USER16> That formula makes sense when you draw a velocity vs time graph and realise the area under the curve is the distance travelled. With linear acceleration, the area is a rectangle with a triangle on top, and everything starts becoming clear, even without calculus.

<comment><USER17> You can also visualize the meaning of d/dx x^n = n x^(n-1) geometrically: There are n faces being extruded which contribute a volume of x^(n-1) dx each.

</comment></comment></comment><comment><USER18> I'm one of the people who never understand the absence of generics in Go and, to be honest, I don't find his reasons here very convincing.

> _Early in the rollout of Go I was told by someone that he could not imagine > working in a language without generic types. As I have reported elsewhere, I > found that an odd remark. [...] What it says is that he finds writing > containers like lists of ints and maps of strings an unbearable burden. I > find that an odd claim. I spend very little of my programming time > struggling with those issues, even in languages without generic types._

Does he suggest we write containers from scratch every time we need them? There is a lot of nontrivial logic, which I'd prefer not to have to get right again every time. (Not to mention that would feel very much the opposite than "programming in the large")

> _But more important, what it says is that types are the way to lift that > burden. Types. Not polymorphic functions or language primitives or helpers > of other kinds, but types. [... long rant why types are for mediocre people > and interfaces are awesome... ]_

I very much agree that interfaces are awesome and composition is way more useful than inheritance, but what does that have to do with generics?

If you have a function that takes a list of things and returns another list of the same things in sorted order, wouldn't you still want to have a way to keep track that the returned list contains the same things as the list you passed to it? That seems independent of whether the things are specified through types or interfaces.

Languages primitives for containers are a good idea, but the way Go eventually implemented that (hardwiring the few most-used containers into the language and making it really cumbersome to use custom containers) seems very unsatisfactory.

</comment><comment><USER19> > C++ programmers don't come to Go because they have fought hard to gain > exquisite control of their programming domain, and don't want to surrender > any of it. To them, software isn't just about getting the job done, it's > about doing it a certain way.

Yeah, because it cannot possibly be that many C++ programmers saw Go as step _down_.

Pike thought that C++ programmers would flock to Go in large numbers. That didn't happen, which means that Pike didn't really understand what motivated these C++ programmers. I don't think this summary gets that much closer to the truth.

<comment><USER20> > _Yeah, because it cannot possibly be that many C++ programmers saw Go as > step down._

You just paraphrased his point.

<comment><USER19> I realize that it might sound like that. But I would paraphrase his point like this:

"C++ programmers spent a ton of time learning C++ so they're not going to switch to a language that isn't C++"

Which is basically saying that none of the design decisions that went in to Go matter to C++ programmers because at the end of the day, Go isn't C++. Which in turn is pretty damn uncharitable towards C++ programmers. A lot of technical criticism was offered, but it's easier to ignore that and focus on something you cannot change.

<comment><USER15> What is interesting is that Rust has seen a lot of interest from C++ programmers.

Many C++ programmers like the fact that it takes their informal rules of safe memory/thread management (use RAII, don't use raw pointers, don't use mutable shared state, be careful of iterator invalidation in containers) and formalizes them in the type system so the compiler can check them.

In addition, Rust has some nice features like pattern matching, algebraic data types, and Traits that are not yet available in C++.

Go on the other hand, was not as compelling to C++ programmers.

</comment></comment></comment></comment><comment><USER21> Linearly more discussions at [https://news.ycombinator.com/item?id=4158865](https://news.ycombinator.com/item?id=4158865) (2012) and [https://news.ycombinator.com/item?id=6417319](https://news.ycombinator.com/item?id=6417319) (2013).

</comment><comment><USER22> I guess I don't get it. I agree the abstract idea that a simpler solution is usually preferable. But I don't see how this translates for a language like C++ or Go.

I understand the backlash against "magic," but this more a concern of "spooky action at a distance" rather than overhead.

Could somebody who understands the sentiment help articulate what type of solutions can be more easily expressed in Go than in say Scala (short of performance-centric cases? Or is this solely about performance-centric cases?).

<comment><USER23> The claim isn't that it helps specific things, but that the more detail work you have to do, the less attention you can pay in the large. This is why, for example, Go has the proverb "a little copying is better than a little dependency"; you make a downpayment in the small to make your architecture cleaner.

This is something C++ makes exceedingly difficult (Linus Torvald's famous rant is half on this topic). This is also something Scala doesn't do well at, opting to provide a lot of features that make bits of code "prettier" at the cost of being able to see what is being built.

</comment></comment><comment><USER24> "Programming in the large" is mentioned a few times in the article but we're still thinking programming one OS process at a time, fiddling with low level data structures - is this really 'in the large'?

<comment><USER25> programming in the large in the sense of many people being involved in a large program

</comment></comment><comment><USER26> So what are the best examples of large programs written in go?

<comment><USER27> etcd, kubernetes, docker, rkt, grafana, cockroachdb, elastic beats

</comment></comment><comment> mark-r Is it coincidence that this is up on the front page at the same time as "C++ Core Guidelines" (rules for modern C++) and I started reading this just after glancing at that? The churn and complexity introduced into C++ in the name of simplicity is simply mind-boggling.</comment>


Mage – make/rake for Go - <AUTHOR> https://npf.io/2018/09/mage/ <comment><USER2> That's some mage goodness right there. 10/10 would totally read that article to children.

</comment><comment><USER3> Mage really scratches an itch we have - nice introduction!</comment>


10x one-line solutions for the euler project  - <AUTHOR> http://united-coders.com/christian-harms/10-one-line-solutions-for-project-euler

<comment><USER2> There are a few shortcomings here. One is that the calls to list() in #16 and #20 are unnecessary - strings are sequences in Python. Another is that the second solution for #19 isn't correct (it might output the right answer, but if so it's a fortunate accident).

<comment><AUTHOR> _ups_ thanx, forget to remove the list(str(x))-term.

And yes, the solution from #19 dont work in every century.</comment></comment>


Ask HN: Which nootropics actually work? - <AUTHOR> I'd be interested in hearing about any non-prescription nootropics or supplements that have actually helped people, specifically WRT focus, clarity and creativity.<p>There have been discussions here from time-to-time, but wondering about recent experiences. <comment><USER2> The clinical evidence for nootropics in for healthy young people is limited, but the case is strong for older adults or people with cognitive impairment. Nicotine, caffeine and provigil are the only things that seem to work for everyone.

It is worth noting that while nootropics probably aren't going to make you smarter, there are many compounds that are likely to enhance long term memory formation. The mechanism for this is stimulation of BDNF secretion, which plays a role in neural stem cell proliferation in the hippocampus. Short chain fatty acids from dietary fiber fermentation, niacin, curcumin, green tea catechins and magnesium have all been shown to be beneficial in this regard.

Of course, probably the best single thing you can do to improve your mind is get more exercise.

</comment><comment><USER3> Nootropics are nothing magical. The effect is similar to listening to the right music or working at the right time. Effectiveness drops sharply past caffeine.

The big ones are exercise, diet, and sleep. These do more than most nootropics.

Exercise: A run, hike, some cardio at least once a week. Walking in a shopping mall doesn't count.

Diet: Your brain runs on glucose. Keep your glucose level moderate.

Caffeine is an obvious one, but I find that the side effect of caffeine is that it makes you more anxious. Personally, I'm already under stress so the extra kick from caffeine makes it worse. It's suitable if you're feeling exhausted, but not something to take every day.

L-Theanine is the most effective I found. L-Theanine is both calming and focusing. It's great during a deadline, or stressful situations like negotiations and interviews. It's my go to drug for programming as often I have to calm myself down from getting too energetic.

You can combine L-Theanine with caffeine, as they complement each other. It depends on how your day is going.

Vitamin E injections (not pills) seem to work very well for me. The effect is similar to exercise in that it feels better, and it's really obvious when it wears off. I'm surprised there isn't more documented evidence for this.

<comment><USER4> Just for clarification - as brisk walking is generally considered to be rather good moderate exercise - your comment that "Walking in a shopping mall doesn't count" is because it's expected to be slow rather than brisk walking, I assume?

<comment><USER3> If you do brisk walking throughout the whole shopping mall, it counts, but if it's just window browsing where you have a lot of steps but low heart rate it doesn't.

</comment></comment></comment><comment><USER5> I have an inattentive type of ADHD and have tried almost everything to help me be a bit more focused when working. From prescribed Ritalin and Concerta (basically an extended version of Ritalin) to nootropics such as Pyracetam etc. Now the Ritalin of course had the biggest effect in terms of focus but after a while I started to feel like a zombie and junkie (lots of jittering, bad mood etc). So one day I decided to flush everything into a toilet and decided to only use available nootropics, not doctor prescribed medications. After a while I discovered DMAE and after 6 months of using it (350-500mg daily) I can say it is almost as effective as Ritalin for me without those nasty side effects and come-downs. The good thing about DMAE is that it helps me focus, yet it still feels natural without that "speedy feeling" effect of Ritalin. Now of course everyone is different and I know some people getting headaches from DMAE and no real results. You really need to test out what works best for your brain.

<comment><AUTHOR> DMAE happens to be one that I've just gotten in today. I tend to have a somewhat exaggerated sensitivity to certain things and, of the supplements I'm considering, DMAE's potential for side effects is probably the most concerning. So, I think I will ease into it with much smaller doses than recommended.

Thanks for sharing your experience.

<comment><USER5> Yes, as I said everyone is different so you need to test it out. For example I felt very bad after using Pyracetam. There was no improvement of my focus ability, in fact I was sleepy and head hurt.

</comment></comment></comment><comment><USER6> Not exactly nootropics but... microdosing LSD/shrooms

</comment><comment><USER7> Keto diet boosted my brain a bit. And i just recently heard that glucose metabolism is getting worse with age. Look into exogenous ketones, if you do not have time for diet. Modafinil kinda works, and with low doses of cannabis it works for me even better.

</comment><comment><USER8> It seems like caffeine and creatine are the two nootropics with a substantial amount of evidence behind them.

</comment><comment><USER9> I wouldn't trust bro-science or profit driven companies with my mental health.

Train your body and you will also be training your mind.</comment>


A Funny Thing Happened on the Way to Reimplementing AlphaGo - <AUTHOR> https://www.youtube.com/watch?v=nk87zsxpF1A <comment><USER2> This is a great talk.</comment>


Fauci says remdesivir is effective - <AUTHOR> https://mobile.twitter.com/NBCNews/status/1255541788154224641 <comment><AUTHOR> I'm surprised by this - there was an article posted earlier on today and the conclusion in the comments was that this wasn't working very well? Is this actually good news after all?

<comment><USER2> There are two studies with (potentially) conflicting results.

The first study (by Gilead) claims that drug is effective. This is the story making the rounds at the moment.

Gilead is coincidentally the maker of remdesivir.

The second study (published in The Lancet) says basically that remdesivir is no better than a placebo and in some cases it makes things worse. This study was funded by the Chinese Gov and has a lead author out of Department of Respiratory Medicine, Capital Medical University, Beijing.

As a result I'm sure the political camps will choose to embrace the message that aligns with their world view.

<comment><AUTHOR> Thanks for the addition of the funding sources. Everything now makes perfect sense.</comment></comment></comment>


Steam updates web browser component to Chromium 49 - <AUTHOR> http://steamcommunity.com/groups/SteamClientBeta#announcements/detail/883080023727152443 <comment><AUTHOR> Smooth scrolling is enabled and it feels incredibly slow to boot. You win some you lose some I guess.</comment>


Was Foxtons right to request my card details be sent by email? - <AUTHOR> My previous apartment was rented through Foxtons and when it came time to move out and get the deposit back, they asked me for my card details (number and expiry date). I asked if I could give it over the phone, but they said they needed it on file (and for another team to actually process it).<p>Firstly, is this standard practice? Secondly, would anyone be able to make a debit against my account without the 3-digit CVV on the back of the card? <comment><USER2> No, it sounds horrible - how is email secure? That's way too many people in the loop too. Why would they need it on file if you are no longer a tenant?

And returning a deposit like that.... I always got a check / cashier's check. I only rented thru Foxton's once and that was a nightmare. And I had to threaten them with a lawsuit to get it - and they paid me by direct deposit / transfer IIRC.

Foxton's has the worst of reputations. Do a google search and don't be afraid to issue legal threats (going thru the proper procedure of course). gov.uk has info and you should have gotten some sort of paperwork outlining your rights -- see

[https://www.gov.uk/tenancy-deposit- protection/overview](https://www.gov.uk/tenancy-deposit-protection/overview)

<comment><AUTHOR> Yeah I thought it was bad... I made a complaint about their security and they just made a dismissive remark about them spending millions of pounds to "ensure their clients are secure"</comment></comment>


The Single Most Important Career Question You Can Ask Yourself - <AUTHOR> http://www.softwarebyrob.com/2008/05/18/the-single-most-important-career-question-you-can-ask-yourself/

<comment><USER2> I went through a nearly identical phase as the author. Obsessive reading, hours in the library, ordering everything related to business, becoming a Kaiser & Blair rep when I was 17. A blur of success and failure.

But always moving forward.

After thinking about it plenty, I think it boils down to this: some folks just weren't born with the fire. Often, this fire looks a lot like insanity.

Your a genius if you succeed, and an idiot if you don't.

I play with fire because it makes me feel good, plain and simple. I hack because I love it. I sell my own software because I love marketing, too.

And everyday, I'm confident that if I give folks enough value, in one way or another, they will give me enough money to eat. And my devious little plan hasn't failed me yet!

<comment><USER3> I find irony in "your a genius."

</comment></comment><comment><USER4> False dichotomy. Interesting, anyway.

</comment><comment><USER5> This article makes me smile because I am a Hacker News groupie.

People can passionately follow art or music or movies and no one thinks them odd for not producing some of the same- that's how I feel about programming. I just like following it, especially the underlying philosophies. I'm an armchair hacker- oh, I've put a few things together in my day but they're the programming equivalent of Harry/Draco slash.

I guess this means Y Combinator's Hacker News has an official fangirl ;)

</comment><comment><USER6> A good kick in the ass.

</comment><comment><USER2> I'm both a consumer and creator.

I consume large quantities of non-fiction, but would prefer to write fiction.

I'd rather create video games than play them.

I don't think consuming and creating are mutually exclusive.

</comment><comment><USER7> Haha I feel like him, except I had ebay when I was 13 (I'm 18 now) -- what a difference time makes!

</comment><comment><USER8> I want to point out that most producers also consume a lot. But it's not necessary true the other way around.

There's also a difference between mindless consumption and focused consumption. People who produce a lot do the latter.

</comment><comment><USER9> Ouch. Time for me to get a move on. Time's a-wasting!

In my favor, my stick-it-in-your-ear conversation takes place tomorrow. It's on the docket and everything! :)

</comment><comment><USER10> Previously on the idea of "consumer" vs "producer" roles:

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

A lot of that is fluff, but the basic premise was that the Internet could probably be built more effectively with some sort of built-in gauge to determine the actuality of a person's "productivity" versus their "consumability."

</comment><comment><USER11> This is the old giver/taker argument.

IMHO the interesting part is even though both are highly related you need extra parts of the brain for the former. For example reading vs. writing. This pattern tends to repeat from reading about fMRI studies (completely reader there myself, not my science.)

I find [pure] takers to be incomplete and get close to be social parasites, even if harmless.

</comment><comment><USER12> If you stop reading in the middle of his blog post, does that answer the question?

I think time has come for me to read less and do more.

</comment><comment><USER13> I won't be the first to say here that producing and consuming, as this post uses the terms, are not mutually exclusive (and are probably orthogonal.) But I believe we choose how much of each we are.

Now I need to prove this to myself. By my recent activity, I am a great consumer and not much of a producer.

</comment><comment><USER14> Huh, that's me. Time to code, I guess.

</comment><comment><USER15> Everyone wants to be a producer. The author intends to incite people into taking action and becoming producers, not stagnating as a consumer.

</comment><comment><USER2> Take. Action.

</comment><comment><USER16> I agree with the general spirit here, but the fact is that most of us vacillate between producer and consumer roles, and fill both to varying degrees.

The perverse irony of modern society is that it's orders of magnitude easier to be a consumer than a producer. I don't mean that producing requires more psychological investment and effort; that's a given, in any case. I mean that society makes it much easier to fill the role of the consumer than the producer. You can consume cheaply and easily, as if the world is begging people to consume.

Producing, in any meaningful, useful, and psychologically sustainable context, is very difficult. Most people don't get to do it. At the very least, you need an audience. Realistically, you also need people to pay you to produce, which means that your odds of getting meaningful work are long (unless you're the only one skilled enough to do the interesting work, the people with the money take the meaningful projects and throw you the scraps). Consequently, 85 percent of people cannot attain work that is more valuable or interesting than watching TV. This is why we're a nation of non-producing consumers.

<comment><USER17> The kind of consuming he's talking about here, the continuous soaking up of information, news, current events, on subjects that interest you, is something I'm pretty familiar with personally, and I can tell you that it can be a cognitive drain that actually reduces your desire to produce. And news is addictive; it's easier than producing something new, and, at least to me, seems to hit the reward receptors in the brain pretty hard.

This is one of the reasons I try to route all the streams of news I keep up with through a single RSS reader; this helps enforce limits on how often I can go back for another hit.

<comment><USER16> You've hit on one of the major reasons why the Internet is worse than TV, as far as time-wasters go. TV gets old after a while and is unfulfilling. The Internet devises new ways of hitting new reward receptors every second, and the possibilities are infinite. Sick of reading? You can write. (Comments, blogs, Wikipedia).

I've often thought of Internet addiction as being more like an overeating problem than a drug problem. You can give up cigarettes or opiates cold turkey, but no one can stop eating. In order to be productive as a programmer, you must daily engage your vice.

</comment></comment></comment><comment><USER18> Rob, have much of an ego there buddy?

</comment><comment><USER19> Damn, I guess I'm not making money every second of the day.

My life is meaningless. I am weak.

...all you need is love?

</comment><comment><USER20> I usually check to see how many comments there and if there are quite a few I can count on you guys to have a good discussion going and I can't help but check what's going on.</comment>


Ask HN: What bank or credit cards are you using? - <AUTHOR>

<comment><USER2> I have 4 banks and 6 different cards. At least one of each major company.

</comment><comment><USER3> Just Visa. Everything in the UK seems to be Visa these days.</comment>


For Writing Software, a Buddy System  - <AUTHOR> http://www.nytimes.com/2009/09/20/jobs/20pre.html <comment><USER3> The article glances over a lot. We pair-program on production code over 95% of the time. Driving duties alternate every few minutes or even seconds. Pingpong programming is common. It's all facilitated by having dual keyboards and mice hooked up to the workstation. Occasionally the pair splits up virtually. Each half of the pair has their MBP sitting there on the desk next to the 30" shared workstation monitor. If the driver is taking care of a mindless task (just typing) then the non-driver can switch their attention to their own screen for whatever, but still be aware of what the driver is doing. Examples of windows you have open on your MBP while pairing are: Harvest for details time-tracking, Campfire to communicate with stakeholders and other devs, pivotaltracker to refer to story details, API references, etc.

On the people front, we do our best to only hire experienced devs that will like the culture and fit in. We're a boutique shop, so we can be very picky about who we hire. Candidates have to pair with us onsite for at least a week before the team decides whether to hire. We've hired qualified interns, but don't hire apprentice or junior-level folks. Occasionally we do extended pairing matchups with client developers in our office, but they have to fit in culturally for it to work.

I think pairing all the time is one of our most important competitive advantages. My teams produce some of the highest-quality code I've ever seen in 15 years in the biz. We are able to effectively leverage XP-style client acceptance in our process because our code is so defect-free.

I'm proud of what we've created at Hashrocket, but usually try to stress the importance of context and talent in making it work. Pairing all the time is one of those things where I have to advise Agile idealists that it probably won't work for them. :(

<comment><USER4> > Candidates have to pair with us onsite for at least a week before the team > decides whether to hire. We've hired qualified interns, but don't hire > apprentice or junior-level folks.

How do those people get the time to do the week with you? Do you only hire folks who are currently unemployed? (Full time for a week means that they're not interviewing elsewhere.) Do folks use vacation (or unpaid) time to see if you'll take them on?

<comment><USER3> > Do folks use vacation (or unpaid) time to see if you'll take them on?

Yes, which also serves as near-concrete proof that a candidate _really_ wants to work with us.

<comment><USER5> Desperation is the new qualification.

</comment></comment></comment></comment><comment><USER6> I've pair programmed before, and in my experience it's great when the codebase and job at hand is so terrible, that when working individually it's hard to have the will to live, let alone be productive.

In this environment, pair programmed got us both past the logjam we were both experiencing on this codebase and we were able to get things into the sort of shape that working alone became not only palatable but enjoyable again.

We also did some API work together, and I think if you're writing interfaces and the like, working on that with someone who will be using it can be helpful in getting a good initial API out there.

There are also other sorts of programming tasks where I don't feel pair programming was very productive (for me/us anyway).

<comment><USER7> Yes, in practice, _everybody_ pair programs, on an as-needed basis. When it's not needed...well, you shouldn't be doing it. I seriously think that non-stop pair programming is just a way to keep people from goldbricking (as the article hinted at the end).

And really, 90 percent of programming is more "typing" than programming because the work is straightforward.

<comment><USER8> That's an exceedingly ignorant statement.

<comment><USER9> I don't know which statement you mean, and it's a bit unnerving to be defending HN's gold medalist of curmudgeonry twice in one day, but I was going to comment on this anyway:

 _90 percent of programming is more "typing" than programming because the work is straightforward._

This may be exaggerated, but it has more than a grain of truth. If you take it to mean 90% of programming _as actually practiced_ , as opposed to 90% intrinsically, it's not even that much of an exaggeration.

Working on harder problems in higher-level languages than I used to, I felt _less_ productive for a very long time. In some ways I still do. I eventually figured out that this was because I was spending much more time thinking and much less time typing. Typing feels like good-old-fashioned-work in a way that thinking doesn't. That's why people feel satisfied after cranking out thousands of lines of code, when in reality they may well have made an unmaintainable mess (and thus destroyed value rather than created it).

</comment></comment></comment></comment><comment><USER10> One of the things I find really effective, and almost never see, is pairing up product managers directly with programmers. Instead of product types going off and holding endless meetings finally resulting in a product spec carved in stone, there's a nice interactive process of product development.

<comment><USER11> We did exactly this for the two-month sprint for the initial code for Dawdle. I moved into the contracting firm's office, and we did this stuff all day long. It was great; they got a sense for what was "nice to have" and non- negotiable and I traded stuff that wasn't as important (a functioning search; we ended up using SWISH-E, _shudder_ ) for stuff that was (user account management). Both sides learned a lot, and I now know that most programmers aren't as good as the people who did that code.

To this day, two years later, our search still sucks, but the basis of that user account management has meant that we haven't had to _touch_ that code in almost two years.

</comment></comment><comment><USER12> My experience with pair programming:

It is so great when the other person is very good/smart at programming. You sense that your work is way more than the sum of the individual parts. It is like an explosion of creativity because you don't stop when you have a block and the other has not, or he has a block and you have not.

It is not great when the other person is not good/smart. You make all the work, the other can only spot the obvious, and makes the sum way less than individual parts. Feels like an endless drain that won't finish ever.

In world war they experimented with airplanes pilots: creating groups with the best ones, letting other groups with the not so good. It was fantastic for the elite groups, but bad for the mediocre ones.

They mixed groups with good and mediocre people and it made the mediocre turn good, but the good didn't became elite.

So I think this has pros and cons, and is not for everyone.

<comment><USER13> My experience differs. I found it much easier to pair with poor/inexperienced programmers than to encounter their code later without having paired. By letting such a programmer do the driving and critiquing as they went, I felt like they were learning useful things and I was saving myself a lot of trouble in the future.

</comment></comment><comment><USER14> > To me, pair programming is the only way to work. Writing code is not only > scientific, it's also a creative process.

I agree with the statement about how programming is creative work, and I disagree with the 'only way to work' statement. Pair programming is a great tool, but it doesn't have to be always used. When you adopt a methodology or process like XP or Scrum, we don't always have to adopt it wholesale - <USER2> pick the pieces that work. Pair programming, in my experience is excellent at solving difficult issues under deadline and/or implementing brand new features. For everything else, it may be overkill. Plus, with pairing, it's hard to get your mental breaks in while you simmer a problem in your mind (e.g. check out News.YC).

It's kind of like the concept of scrum rooms. We had a critical iteration and flew everyone in for a conference room-based intense week-long session. We got a lot done - much more than we could have done over WebEx. However, at the end, I wanted to kill the guy with the noisy trackball. Close quarters can become trying over time (extended family meetings anyone?)

Hashrocket may be a notable exception to the norm of programmers working in isolation/cubes (especially in larger companies)

<comment><USER15> > To me, pair programming is the only way to work.

Could've softened that up a bit, sure. I completely agree that not every problem is a nail for the hammer of pair programming. We've developed a very popular and productive pairing environment at Hashrocket.

We have found pairing to be helpful in solving difficult issues. And we have used it to enhance the design of software being written from scratch.

As for the mental breaks, some of us use the pomodoro to coordinate their break times. Others prefer to agree to breakpoints as they come.

We know pairing is not a fit for everyone, everywhere, all the time. However, if you _are_ interested, this is how we do it, it works for us and, we hope our experience helps you.

Cheers!

</comment></comment><comment><USER16> 'Pair programming' would get a bit frustrating, don't you think? I suppose productivity would greatly depend on the personalities involved.

<comment><USER17> I usually let who ever is "driving" just write the damn code. He might write poorer code than I, but we're just trying to solve story cards quickly and if the tests pass, I don't complain. I usually only perk up when I notice logical errors, or other places in the code that we'll have to change when my pair refactors something.

<comment><USER18> You're missing half the fun, then. Part of the point of code reviews (and pair programming is, at its core, extreme code reviewing) is make sure both write the best possible code, both in terms of being bug free and adhering to company standards.

If you don't care about how the code ends up in terms of structure other for the logical errors, you're doing it wrong (well, according to me anyway, so it's not that big of a deal :P)

</comment></comment></comment><comment><USER19> I quit my last job because of pair programming. I absolutely cannot think with another person sitting next to me at a desk. It's the absolute worst experience I've ever had as a developer.

</comment><comment> brown9-2 I've never experienced pair programming, and I'm dubious that I'd work well in it, but I'm amazed at employers that would _prevent_ employees who were interested from working in pairs.

<comment><USER17> The best thing that comes out from it is the peer pressure to stay focused. Even if your pair doesn't know anything about programming, just having him sit there and watch you will make you at least twice as productive so that you don't end up reading Hacker News while your unit tests are running!

Sometimes we'll be so engrossed in the engineering, that neither of us will remember that restaurants close at 9pm and we have to stop to eat.

</comment></comment><comment><USER20> Hey Rocketeers, cool that you guys got covered in NYTimes! I was lucky to work with these guys last year. Pairing really does help improve code quality, but I still prefer to code solo or have two separate work streams going at once.

</comment><comment><USER21> One thing I like doing when pair programing is have the navigator code up the specs for the new feature while the driver is implementing... I find it rather efficient at catching bugs...

</comment><comment><USER22> Pair programming seems to be good, if you have everything defined. But in reality, you research, experiment, hack things around. You work on hunches and quickly implement them, then gradually improve them, compare the solutions and find the best. Pair programming would be pointless; rather annoying in this case.

<comment><USER23> Actually, it is precisely the experimentation / hunch-following times where I've found the biggest productivity gains -- bouncing ideas around with another smart and creative person is a lot more stimulating and effective than the code - compile -check loop!

<comment><USER9> It works both ways. Sometimes I want to throw ideas around with a partner and other times I want to go deep inside an intuitive thought process. The key is to recognize what wants to happen at any given moment, and to have a culture that respects that flow. It really bugs me when people try to impose a predefined process on that. But it also bugs me when people come up with reasons to say co-programming isn't productive, when experience shows that it clearly often is. (Not that you were doing either of these things.)

<comment><USER23> Totally! These tools are best used in a flexible environment, when you're in need or the situation calls for it. I think it is pretty safe to say that "this way all the time" is wrong for all values of "this way".</comment></comment></comment></comment>


Annyong, a small web server that serves static files from the current directory - <AUTHOR> https://github.com/remiprev/annyong <comment><USER2> Simpler:

        python -m SimpleHTTPServer

<comment><USER3> Aw, I was just about to write just that comment. :)

<comment><USER4> Me too. I don't use python for development on a day to day basis but use the python SimpleHTTPServer all the time.

</comment></comment></comment><comment><USER5> This is something I don't really understand about the way so many tiny Ruby projects are structured. Do you _need_ six folders to hold about 200 lines of code? It's organized, but it seems like it's more work to get a grasp on the whole program. Is this something enforced by rack or rubygems?

<comment><AUTHOR> I agree the project structure might be overkill. But that's just the way I organize my folders and files, you know, just in case I need to expand later :)

</comment></comment><comment><USER6> Named after that kid on Arrested Development! (Or rather, it means "hello" in Korean.)

<comment><USER7> Love the show, but I keep reading it as "Annoying".

</comment></comment><comment><USER8> I use thttpd: <http://www.acme.com/software/thttpd/thttpd_man.html> for simple fast serving.

</comment><comment><USER9> Can I please ask why this is being upvoted without being downvoted? I'm not asking out of arrogance, hatred or jealousy infact I think the project is quite cool as its similar to what I have done myself using eventmachine in ruby and libevent in c but is it HN front page worthy? I feel like its been done to death.

<comment><USER10> Basic submissions can't be downvoted.

<comment><USER11> The grandparent almost certainly means "can I ask why this article is considered interesting without seeing my comment buried at -4".

</comment></comment></comment><comment><USER12> I use serve - <https://github.com/jlong/serve>. It can render erb, haml, html, and has the concept of a layout. It can also be as simple as `serve` in the current directory to serve up any files or directories.

</comment><comment><USER13> Also see my gem, Boost (<https://github.com/ashleyw/boost>). I designed it to prototype Haml/Sass/CoffeeScript sites in a transparent manner, but it'll serve anything from the current directory too.

</comment><comment><USER14> Combine this with <http://pagekite.net/> (my project) and it can be visible to the wider Internet, not just your local LAN. :-)

</comment><comment><USER15> The name might need work.

When skimming the HN front page, I thought it said: "Annoying small web server..."</comment>


Gigabit WiFi? 802.11ac router makes it possible, starting in May - <AUTHOR> http://www.kurzweilai.net/gigabit-wifi-802-11ac-router-makes-it-possible-starting-in-may

<comment><USER2> I hope they will optimize it for energy efficiency and keep the speed the same on mobiles for now.

<comment><USER3> Beam forming trades more computation (which uses less power than you'd think thanks to dedicated hardware) for much less broadcast power. Also, 1 Gbps is only achievable with multiple channels combined. If a phone only uses one band, it would take a lot less power, drop your theoretical throughput to 250 Mbps (which IMHO is still overkill for a phone), and keep all the other advantages of the new spec.

</comment></comment><comment><USER4> I expect it to catch on once apple supports it.</comment>


How I got hacked in 10 hours on Google Cloud Platform - <AUTHOR> http://www.kidsil.net/2014/12/hacked-in-10-hours-google-cloud/

<comment><USER2> "Google Compute Engine should be a lot more secured out of the box"

Most modern server instances _are_ secure out of the box. It's the user who makes them insecure.

I like AWS because it lets you manage firewall settings of EC2 instances through the console. I obviously open port 443 to the public, but nothing else. If I need to get in for some reason, I whitelist my current IP, log in, and then remove the IP.

That decreases the points of failure quite a bit. I'm not sure if there's a GC version of the same thing.

Did you use a password to log into this instance? For a production server like that, you should be using SSH keys with secure passphrases.

In case you have a root password and were logging in as root, that's another thing you shouldn't do.

<comment><AUTHOR> As mentioned in the article, I've simply used the click-to-deploy feature to create my instance.

SSH Keys were with passphrases, and the Console's SSH client logs you in as your account name's user (not root), I never logged in as root myself actually.

<comment><USER2> Well, definitely use 2FA on your GC account, then.

Ubuntu-based EC2 instances aren't "more secure", but they set you up as a user of better security practices. Like any set of tools, though, you have to understand them and use them properly.

Is something like Heroku not an option for you?

<comment><AUTHOR> _Is something like Heroku not an option for you?_

It is now.

</comment></comment></comment></comment><comment><USER3> Doesnt really go into "how" enough for my own clickage.</comment>


TTNT: Test This, Not That - <AUTHOR> https://github.com/Genki-S/ttnt <comment><USER2> These are all remedies for the symptoms. The actual disease, which is considering the framework part of your core business application, remains.

Decoupling from your persistence (and presentation, fwiw) brings a lot of benefits, not only faster tests. I'm sick of people saying "why introduce a layer here if we'll never change the database?". The answer is simple: yes, you will change the database, specially when testing where you want to plug an in-memory store.

Again, I get that Rails gives us conventions so we don't keep bikeshedding, but how often do we challenge these conventions? How often do we question whether the problem we're solving fits the CRUD/MVC patterns?

</comment><comment><USER3> I think the biggest problem with testing in Rails is the strange ideology about it.

Most of the Rails apps I've code reviewed have lots of tests of business logic that are tightly coupled to ActiveRecord and are (as a result) very slow.

One way to improve upon this might be to move from a test-oriented approach to a contracts approach where domain objects obey contracts.

It seems that this is the actual intuition behind the "declarative" associations in ActiveRecord, yet so many tests simply test what has been declared, as if it can't entirely be believed.... Does this model actually have a working input validation? Does it have working associations? If this is in doubt there are bigger problems.

Also, most apps use relational, hierarchical data (which is actually just a graph), which we declare via AR associations... models contain a mix of logic and data plumbing, and thus persistence layer concerns tremendously complicate testing simple graph oriented intuitions about our data, which could also be stated declaratively and enforced contractually instead of via the typical "callback hell" approach. So we stub callbacks and mock adjacent graph nodes and tell ourselves falsely that our "model" is well tested.

The complexity in testing most apps lies in setting up app state to test edge cases in the algorithms. There have been lots of workarounds to try to skip this or make it faster, but in the end the abstraction is the problem.

I want to be able to create simple data, such as a few hash literals, and test the flow of data through the business logic (algorithms) of my code without having to wait 60 seconds for the app to boot.

Ruby is not all that slow a language. I think a reasonable test suite for a large app should run in under 2-3 seconds. But Rails apps end up testing ActiveRecord, template rendering, and all sorts of other code that is already well tested and should be assumed to work by the test suite, but generally can't be because of the tight coupling mentioned above.

One other example: Templates are essentially functions that output HTML, but since they have ill-defined input requirements, there is not a simple way to throw valid input at them and verify correct output other than simulating the entire server request/response, yet most programmer errors will be in the implementation of the template, not in the boilerplate controller code. Yet millions of hours of CPU time (and programmer time) are burned testing these the hard way.

<comment><USER4> Regarding the testing of views:

If using RSpec, there are "view" tests that test rendering the html in isolation. You specify the instance variables (AKA input) that the template is expecting, and you test the output. No server request/response is involved.

See [https://www.relishapp.com/rspec/rspec- rails/v/2-0/docs/view-...](https://www.relishapp.com/rspec/rspec- rails/v/2-0/docs/view-specs/view-spec)

<comment><USER3> Glad to see that exists... very cool.

</comment></comment></comment><comment><USER5> I remember reading the original article that inspired it and thinking "huh, that's a cool idea." In practice I wonder if they'll ever really sort this out:

> Test selection algorithm is not perfect yet (it may produce false-positives > and false-negatives)

The problem is you're going to need to run the entire test suite before deploying anyway unless the algorithm is perfected. If you have to do this anyway, while it's helpful to have more confidence going into an hour long test build that it's going to pass, it's probably more helpful to just build an infrastructure on which the entire test suite runs more quickly. I've worked on sites with extremely large test suites and it was never an issue to run the tests in < 10 minutes because they could be run on an infrastructure that allowed tests to be run in parallel. I think that's the solution rather than a complex and flakey algorithm.

<comment><USER6> > Test selection algorithm is not perfect yet (it may produce false-positives > and false-negatives)

I haven't read the code, but the associated document explaining the method makes no mention of accounting for line renumbering as a result of changes.

The accuracy with which changes are identified depends on the diff algorithm. I imagine it is more likely to generate false positives than false negatives (which is preferable), but I am sure there are cases where a line is unchanged textually but is different semantically (e.g. by the insertion or removal of an 'else' above it), and the diff program will consider it unchanged.

<comment><USER5> It's not only that, once you know whether or not something has changed you then need to know what tests need to be run.

</comment></comment></comment><comment><USER7> Facebook does this to scale their tests, you can hear Katie Coons talking about it in CI at the end of [https://www.youtube.com/watch?v=X0VH78ye4yY](https://www.youtube.com/watch?v=X0VH78ye4yY). There are also rules that say "if you changed this file, run all tests" for things like CI config and such.

Also, the build tool Buck ([https://buckbuild.com/](https://buckbuild.com/)) enables this because it knows the graph and associates tests with the code they test...so you even get this test minimization locally as a developer (that is, outside CI) for free. I'm sure Bazel likely has a similar feature too.

</comment><comment><USER8> They are looking for Rails apps to run TTNT tests on to see if your tests pass the test... ;) [https://github.com/Genki-S/ttnt/issues/38](https://github.com/Genki-S/ttnt/issues/38)

</comment><comment><USER9> It seems to be based on code coverage measurements. I wonder if it will miss things like interface definition files that are never technically executed.

</comment><comment><USER10> Slightly misinterpreted title at first glance. Was really hoping for testing via turtles and martial arts...

</comment><comment><USER11> This seems like something that a semantic diff could aid in tremendously. Determining which code to test via coverage or attempting some text parsing based on commits is likely be very error-prone. Determining code to test based on differences in a syntax tree seems more concrete to me.

</comment><comment><USER12> Cool idea. This would be useful to quickly run tests on local env.

Does anyone know if there is a similar project for Java?

</comment><comment><USER13> The opening sentence of your README should explain, briefly, what the project is. Take a look at this link on a mobile device -- there's literally no useful information about its purpose or function, because everything beyond the opening paragraph is collapsed by default.

<comment><USER14> Is this so much extra effort to click "View all".

IMHO, the build info at the top is pretty useful

<comment><USER13> It's not the build info that's the problem; it's "Developing under Google Summer of Code 2015 with mentoring organization Ruby on Rails."

And it's not just my one click -- it's the cumulative clicks of every visitor to the site. With it on the front page of HN, there are going to be staggering numbers of potential users glancing at the page on their phones during their commutes today, not seeing anything immediately eye-catching, and moving on to the next submission.

</comment></comment></comment><comment><USER15> Should have called it Test Me, Not That</comment>


GCHQ: Can you find it? - <AUTHOR> https://canyoufindit.co.uk/ <comment><USER2> Yes you too can work as a minimum wage government slave chained to a PC for cracking this...

Any person who cracks this should post it on a blog straight away just to undermine the whole process.

<comment><USER3> My impression is that they actually pay the tech people pretty well to be chained to a desk...

<comment><USER4> [http://www.prospects.ac.uk/intelligence_analyst_salary.htm](http://www.prospects.ac.uk/intelligence_analyst_salary.htm)

<comment><USER5> £31 000? Meh, that is low. Finance industry gets you above 75k

<comment><USER6> I think it's more that finance is high rather than GCHQ is low. £31k is about average for engineering grads.

<comment><USER7> It's 31k after five years experience.

<comment><USER2> And being public sector, that's "if you suck everyone's cock on the way up".

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> Despite their best efforts, some good people do manage to slip through GCHQ's recruitment programme: [https://en.wikipedia.org/wiki/Katharine_Gun](https://en.wikipedia.org/wiki/Katharine_Gun)

</comment><comment><USER9> Hey, come work at GCHQ! Look at this woman smiling [http://www.gchq- careers.co.uk/life-at-gchq/overview/](http://www.gchq-careers.co.uk/life-at- gchq/overview/). She almost looks like she believes she's doing good!

<comment><USER10> What if she is? One danger with Edward Snowden's revelations is throwing the baby out with the bath water.

Perhaps nations need SIGINT agencies.

<comment><USER11> If we do, we need to make sure there are clear limits to their powers, which are respected and enforced.

<comment><USER12> But if we do that, we will let the terrorists win!

/s

<comment><USER13> Climate-change deniers are silly. Our governments have created and sustained a climate of terror for over a decade!

</comment></comment></comment></comment></comment><comment><USER14> You, too, can help spy on everyone, infringe on human rights, and help with corporate espionage! Be part of something big. Be part of the surveillance state. The future is here.

[http://www.cs.ucdavis.edu/~rogaway/politics/surveillance.pdf](http://www.cs.ucdavis.edu/~rogaway/politics/surveillance.pdf)

<comment><USER5> What I find scary is that people who would respond to their advertisement/challenge are perhaps those who think themselves better than anyone else, who stand above things such as human rights, surveillance and who can justify for themselves working an unethical job, excuse it away "its just a job and I am one of the few expert enough to do it".

Perhaps GHCQ has found there is only a certain kind of people that would accept their challenge and still wish to work for them after all the leaks - the kind of person they need, the cold calculating moral-less bastards that will become our overlords because they have no conscience or willingness to live in a free democratic world.

</comment></comment><comment><USER15> I thought one of the prizes were 1000 Rasperry Pis and that had some appeal. Turns out it was only one. Cheap bastards.

</comment><comment><USER12> "Also check out our site for kids 'Where in the world is Edward Snowden?'"

<comment><USER16> ...and GCHQ in Association with the NSA and BetFred.

Place you bets now, heart attack or car crash?

</comment></comment><comment><USER17> Challenge three is located here:

[http://www.thisisgloucestershire.co.uk/bletchley.html](http://www.thisisgloucestershire.co.uk/bletchley.html)

2910404C21CF8BF4CC93B7D4A518BABF34B42A8AB0047627998D633E653AF63A873C\

8FABBE8D095ED125D4539706932425E78C261E2AB9273D177578F20E38AFEF124E06\

8D230BA64AEB8FF80256EA015AA3BFF102FE652A4CBD33B4036F519E5899316A6250\

840D141B8535AB560BDCBDE8A67A09B7C97CB2FA308DFFBAD9F9

<comment><USER18> ...which is actually [http://www.thisiscreativeservices.co.uk/websites/EXT- glouces...](http://www.thisiscreativeservices.co.uk/websites/EXT-gloucester/) served up in an iframe. Wat?

</comment></comment><comment><USER19> What's the process for going about decrypting these things? I've seen some that are just base64 and the like - but those have obvious patterns. How are you meant to decrypt something when you don't even know the algorithm? Is it just a series of brute forces against different algos?

<comment><USER10> Have a go at the first one. It's likely to just be a simple cipher:

       AWVLI QIQVT QOSQO ELGCV IIQWD LCUQE EOENN WWOAO
       LTDNU QTGAW TSMDO QTLAO QSDCH PQQIQ DQQTQ OOTUD
       BNIQH BHHTD UTEET FDUEA UMORE SQEQE MLTME TIREC
       LICAI QATUN QRALT ENEIN RKG

You might notice that there are a lot of Q's, perhaps those are E's... You might also look at repeated letters, or common letter pairs.

<comment><USER20> It doesnt seem like a normal ceasar or ROT algorithm. I am trying it as a "playfair" algorithm at the moment but that seems like a dead end aswell.

<comment><USER21> Probably not Playfair since there are repeated digraphs.

<comment><USER22> I've tried caesar shift using Q as E (based on frequency) so M is A but that failed epicly... also tried a viginere using GCHQ as the key word but again failed epicly :L Not even bothering with Playfair. simple letter to Ascii doesn't work either and i really can't be bothered with going stupidly complicated :/

</comment></comment></comment></comment></comment><comment><USER23> Got it:

A COMPUTER WOULD DESERVE TO BE CALLED INTELLIGENT IF IT COULD DECEIVE A HUMAN INTO BELIEVING THAT IT WAS HUMAN WWWDOTMETRODOTCODOTUKSLASHTURING

Now onto something a little more productive.

<comment><USER24> How did you crack it?

<comment><USER25> it's a transposition cipher where the Qs are spaces.

<comment><USER24> Which type exactly?

<comment><USER23> Scytale - [http://en.wikipedia.org/wiki/Scytale](http://en.wikipedia.org/wiki/Scytale)

</comment></comment></comment></comment></comment><comment><USER26> Challenge Five is here:

[http://www.standard.co.uk/advertorials/gchq/](http://www.standard.co.uk/advertorials/gchq/)

<comment><USER27> What are the answers for 3 and 4? I seem to be stuck.

<comment><USER26> I found that page through other means.. ok.. now onto 3 and can't solve it!

<comment><USER25> first look at the 3rd one the ciphertext looks consistent with random data at least for single byte frequencies.

<comment><USER22> figured out 3rd one yet??

</comment></comment></comment></comment></comment><comment><USER28> Nice of GCHQ to use google analytics and incremental numbers.

_gaq.push(['_setAccount', 'UA-43702630-1']); _gaq.push(['_setAccount', 'UA-43702630-2']); _gaq.push(['_setAccount', 'UA-43702630-3']); _gaq.push(['_setAccount', 'UA-43702630-4']); _gaq.push(['_setAccount', 'UA-43702630-5']);

<comment><USER29> Looks like the campaign is being run by a 3rd party - [http://www.gchq.gov.uk/Press/Pages/solve-cyber- secret.aspx](http://www.gchq.gov.uk/Press/Pages/solve-cyber-secret.aspx)

</comment></comment><comment><USER30> Makes me think of the movie Mercury Rising[1], where a kid "wins" an NSA crypto challenge and is subsequently hunted by them because he cracked their code.

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

</comment><comment><USER31> How dare you post a recruitment microsite for GCHQ, poor taste, Sir, poor taste.

<comment><USER32> I honestly think that while this has every right to be here - and be discussed here - given the last couple months' worth of revelations it's pretty offensive nevertheless.

Obviously SIGINT for a nation isn't a bad thing per se, but when they infringe on the core democratic principles of the state they claim to represent then that's just a disgusting abuse of power.

<comment><USER33> While I agree that this is a tender topic at the moment, I have a hard time stretching it out as far as to being offensive, since it's a cryptography challenge posted by a mathematician.

I do agree that there have been gross abuses of power committed over the past years, but this isn't necessarily something that should be the center of a debate on it. Especially since they aren't forcing you to apply to a job by participating in this challenge.

</comment></comment></comment><comment><USER34> GCHQ does two things.

1) It keeps things secret, even from the people who work there

2) It claims it obeys the law and that it has strict oversight.

Thus, good people work there in the belief that they are working for an organisation that does not engage in mass surveillance of their fellow subjects. Those people did not know that oversight failed, or that some of the work was a mass surveillance programme of uk subjects.

</comment><comment><USER35> Answer 1: turing

Answer 2: bletchley

Answer 3: ?

Answer 4: colossus

Answer 5: secured

Don't feel like supporting this recruitment drive, to be honest. GCHQ appears to be the rolling data buffer for the NSA...

<comment><USER35> Answer 3: enigma2013

<comment><USER27> Any idea, how to decrypt it? I've been dealing with this for two days now. I really want to find out how this works.. :X

<comment><USER35> [https://gist.github.com/donovanhide/6540272](https://gist.github.com/donovanhide/6540272)

</comment></comment></comment></comment><comment><USER36> > "We also have some great prizes. You can win 1 of 100 Raspberry Pi"

It would probably cost most of us more (in terms of what our time is worth) to solve this PR stunt than it would to just buy one of those boards new.

</comment><comment><USER37> Send emails intimating your aspirations to terrorism and it will find you.

</comment><comment><USER38> I grew up in Gloucestershire with neighbours that worked for GCHQ and at least three of my school friends went on to work for the doughnut shaped building (which was a collection of huts back then). Over the years we have had our chats and I tried to work out what they do and why they do it. Were they really dedicated to catching the terrorists?

The benefits of working there are simple: a job for life with enough money to pay the mortgage. Perfect if you want to start a family, bring up the kids in idyllic countryside, work sensible hours with a reasonable commute and retire with a pension worth having. You don't get this if you work in London! For a lot of people this is a pretty good deal, what surprises me is that GCHQ don't try to attract people on this basis.

One of my school friends that went to work for them was actually very bright, however, he was also the first to get into whatever drugs were available and he had a drinking problem before being legally allowed to buy the stuff (18 in the UK). A few years ago I was able to talk with him candidly about interception capabilities, e.g. the lengths one would need to in order to place a truly anonymous phone call. I was also able to chat about things in his domain, e.g. the practicalities of managing untold petabytes of data. He was not a completely leaking sieve, however, if he did have any secrets worth sharing then I am sure that an attractive girl with a four pack of lager would have been able to compromise him in a matter of minutes. He was borderline suitable for 'handling state secrets' (in my opinion).

Questioning his motivation, a lot of it came down to kiddie porn - of all things. He saw himself and the agency as the moral guardian that was saving the world from kiddie fiddlers and their evil ways. So the ethics of 'gentlemen don't read other gentlemen's mail' did not come into it - some of that mail could be kiddie porn!

As for my other school friends that worked there, they were borderline 'special needs', absent from the top class of maths and maybe 3-5 sets down in the maths pecking order. They were not super-bright by any stretch of the imagination. However, they were smart enough to hold the job down as they had not been given too many stellar opportunities elsewhere. Their lack of intellectual horsepower was an asset in that they would do their work, not ask too many questions and not spill the beans when plied with alcohol by some voluptuous lass.

However, I suspected that they were kept in the dark like mushrooms. They were not privy to the grand plan. They may have had 'dogsbody data entry' work that they just did until clocking off time. They did not have exciting work, hence all the more reason not to talk about it. But they did work on secret stuff, apparently, and that was ego-boost-worthy to them, or at least that was the exterior appearance.

Although anecdotal, what I do know is that GCHQ is not stuffed to the gills with super-smart code crackers that are more giftedly geniuser than you is. There are flawed characters and intellectual also-rans making up the numbers. Like any employer (except Google) they have challenges in attracting the best and brightest, but, for the bulk of their work, they don't actually need the truly gifted. Do-as-your-told types will suffice.

GCHQ can attract intellectual also rans for the 'data entry roles' by hiring locally, the deal being cosy job for life. But, to hire the really clever people needed that they really, really want, what is the hook?

I don't know what happened to the 'war on kiddie porn' but it is now something that the likes of the FBI and GCHQ aren't making a big song and dance about. As for the 'war on terror' that has been bogus since day one, like it or not there are no 'al-qaeda' terrorists out there (although there may be Somali pirates etc.). There is no 'Soviet threat' either. We can only guess as to what they really do, however, thanks to Snowden, we can have a good guess about some of it. I personally don't think that mass surveillance pays the bills as well as doing the spying necessary to win arms deals, so we are still guessing about what they do.

I know everyone has their price, but, why would anyone clever enough to work out these ciphers want to work for GCHQ given the true nature of what they do, i.e. do the American's spying for them?

<comment><USER34> > Although anecdotal, what I do know is that GCHQ is not stuffed to the gills > with super-smart code crackers that are more giftedly geniuser than you is. > There are flawed characters and intellectual also-rans making up the > numbers. Like any employer (except Google) they have challenges in > attracting the best and brightest, but, for the bulk of their work, they > don't actually need the truly gifted. Do-as-your-told types will suffice.

> GCHQ can attract intellectual also rans for the 'data entry roles' by hiring > locally, the deal being cosy job for life. But, to hire the really clever > people needed that they really, really want, what is the hook?

Of course GCHQ don't use geniuses for data entry, and most of the work is mundane and most people don't know much about what the other people are doing or where their work fits in.

What's the hook for the actual geniuses?

Imagine you have Asperger's (or similar), and want to work on interesting math with similar people in a comfortable environment. GCHQ is that place.

Your point about images of child sexual abuse is interesting. GCHQ / CESG provide information to the Government, so it's surprising to see such stupid commentary coming from government about images of child sexual abuse. "Google filters spam, why can't they filter images of child sexual abuse" being one paraphrased example of pure idiocy. I don't know how much information GCHQ provides to the Internet Watch Foundation. I hope there is some channel to push information to them or to law enforcement.

<comment><USER22> google actually pays people to go through thousands of videos and stop the really horrific ones from showing up in the searches (or atleast showing high up in the searches)... the only problem is that apparantly they don't get any psychological help when they leave and i can imagine some of them videos being pretty damn disturbing

</comment></comment></comment><comment><USER22> ughh can't figure out challenge 3 :/ [http://www.thisiscreativeservices.co.uk/websites/EXT- glouces...](http://www.thisiscreativeservices.co.uk/websites/EXT-gloucester/) anyone got ideas??

</comment><comment><USER39> I'm stuck on Challenge 3.

</comment><comment><USER40> It's a trap!</comment>


ClojureScript de Jong Attractor - <AUTHOR> https://github.com/cjlarose/de-jong <comment><USER2> Author here! I experimented a bunch with different ways to calculate the plotted points. WebGL shaders outperformed everything by a mile, though it was weird dropping down into what's essentially a low level C-like language. Check it out [https://github.com/cjlarose/de- jong/blob/master/src/de_jong/...](https://github.com/cjlarose/de- jong/blob/master/src/de_jong/components/point_cloud.cljs#L7-23)

<comment><USER3> Obviously I'm showing my lack of knowledge here. I really only know enough about Open GL to look stupid on the internet ;-)

I've often wondered, though, how hard it would be to write a lisp compiler that outputted ARB, rather than use GLSL for coding shaders. Is this possible?

I may be completely wrong, but my gut feeling is that shader coding seems like it would be a natural fit for functional languages.

<comment><USER4> I think there have been a few efforts to do such a thing. A quick search of github and I found [https://github.com/kovasb/gamma/blob/master/README.md](https://github.com/kovasb/gamma/blob/master/README.md)

<comment><USER2> I stumbled upon gamma when I first starting looking into shaders--it's pretty incredible what it's doing. mikekchar is exactly right, I think, in thinking that lisp is a good candidate for creating what's described as embedded domain-specific languages (EDSLs). When I first explored writing my own shader for this project, I opted for doing it myself just so I could get a better understanding of what's happening under the covers, with the intention of maybe introducing gamma later. It ended up that my shader was super simple-- just a for loop and some basic trig math, so it wasn't super necessary to migrate. But, from what I've heard, even mildly complex shaders can get out of hand quickly, so gamma and projects like it are super promising.

</comment></comment></comment></comment><comment><USER5> My favorite is the cube: [http://goo.gl/qnDIFW](http://goo.gl/qnDIFW)

<comment><USER2> Make sure to check out the perfectly circular ones, too! [http://goo.gl/zilq50](http://goo.gl/zilq50)

</comment></comment><comment><USER6> Destroyed my back button.

</comment><comment><USER7> This cjlarose guy sure is talented!</comment>


How high can you go? Gasoline prices in the Netherlands - <AUTHOR> http://translate.google.com/translate?js=n&prev=_t&hl=nl&ie=UTF-8&layout=2&eotf=1&sl=auto&tl=en&u=http%3A%2F%2Fwww.nu.nl%2Fbrandstof%2Findex.html&act=url

<comment><AUTHOR> For US people: [http://lmgtfy.com/?q=1.70+euros+per+liter+to+dollars+per+gal...](http://lmgtfy.com/?q=1.70+euros+per+liter+to+dollars+per+gallon)</comment>


Ask HN: Would you work for a company just out of Chapter 11? - <AUTHOR>

I have a question about my new Job offer: Should I accept an offer from a large company which just emerged from Chapter 11 bankruptcy ? or accept one from well established company with large cash reserves? <comment><USER2> How confident are you in the company moving forward? What were the circumstances for it going bankrupt?

If you feel confident about the company's future, then analyze it like a normal job offer.

I'd imagine the only concern in joining a company that was bankrupt is whether it will happen again. If you believe this is NOT the case, then why not?

</comment><comment><USER3> If they want to pay you good money to do work you want to do, take it: we're in a recession. If it tanks, it's a resume line item, if not, so much the better.

Of course, if you have an offer from a company you're sure won't go under, then that might be a better move.</comment>


Intel and Qualcomm sync up on 802.11ad interoperability - <AUTHOR> http://semiaccurate.com/2016/02/02/intel-and-qualcomm-sync-up-on-802-11ad-interoperability/ <comment><USER3> Why did the Wi-Fi Alliance certify them before making sure they are interoperable anyway? Non-interopable "standards" are major failures - <USER2> DLNA. Was it because at least one of them was already working on the implementation before the Wi-Fi Alliance bought up WiGig?</comment>


Study shows animal life thriving around Fukushima - <AUTHOR> https://phys.org/news/2020-01-animal-life-fukushima.html <comment><USER2> This was very interesting to read. I wonder what it will teach us as time goes on.</comment>


The 11 rules of the HP Garage (where all began) - <AUTHOR> http://blog.mashape.com/the-11-rules-of-the-hp-garage-where-all-began

<comment><USER2> In case someone thinks Hewlett & Packard had something so oddly anachronistic pinned to their garage wall back in 1939 -

 _The rules were first formulated by Carly Fiorina in 1999 - during her tenure as then HP CEO - and were later used in a Hewlett-Packard ad campaign._

<http://en.wikipedia.org/wiki/Rules_of_the_garage>

<comment><USER3> In other words, it's insipid marketing fluff. A silicon valley version of "Just Do It"

</comment></comment><comment><USER4> Kelly Johnson's 14 rules of management are great, especially the unwritten one:

 _Starve before doing business with the damned Navy. They don't know what the hell they want and will drive you up a wall before they break either your heart or a more exposed part of your anatomy._

[http://en.wikipedia.org/wiki/Clarence_Johnson#Kelly_Johnson....](http://en.wikipedia.org/wiki/Clarence_Johnson#Kelly_Johnson.27s_14_Rules_of_Management)

</comment><comment><USER5> My favorite: "Work quickly, keep the tools unlocked, work whenever."

<comment><USER5> This rule would work for the best hacker in the office or the worst slacker.</comment></comment>


Can Lego Break a Steel Axle? - <AUTHOR> https://www.youtube.com/watch?v=jRn5waE0qfk <comment><AUTHOR> Observations:

By

A) Adjusting the gear ratio such that twist could be introduced in the steel axle;

and

B) Reversing (and re-reversing) that twist enough times, eventually a stress crack was formed;

C) That stress crack, coupled with enough additional reversing and re- reversing of the twist, resulted in the steel eventually becoming completely cracked.

So yes, under certain circumstances, plastic Lego can indeed break a steel axle...</comment>


Apple Flips the Switch, iCloud Goes Live - <AUTHOR> http://www.macobserver.com/tmo/article/apple_flips_the_switch_icloud_goes_live/ <comment><USER2> I was able to successfully log on from a linux machine (1.73GHz quad-core i7 with 8G of RAM, using chrome). Unfortunately, the interface could well be the slowest web interface that I have ever seen.</comment>