An Opinionated Treatise on Cosmos, a New Programming Language - <AUTHOR> https://medium.com/@McCosmos/a-treatise-on-cosmos-the-new-programming-language-905be69eb4af <comment><USER3> It looks like Oz [1] declarative variables could help implement a lot of this stuff. Essentially, its variables are pointers that can be assigned to only once. As such you can pass an unbound variable to a function and have it bound to produce a result.

You can also do "unification" between two variables, meaning that it will try to make the two variables equal to each other. Typically, one or both of the two variables hold a partial data structure - a data structure that references unbound variables - and it will binds some of these variables to make the unified variables compatible, if possible.

[1] [http://en.wikipedia.org/wiki/Oz_%28programming_language%29](http://en.wikipedia.org/wiki/Oz_%28programming_language%29)

<comment><USER4> I was also lost at functor...

<comment><USER3> Which is not mentioned in my comment or in the wikipedia page :)

But I get your point. Oz is a nice language which suffers from poor marketing and lack of support. It's a really lovely language though. It's the closest take I've seen so far of enabling expressibility by using a small number of orthogonal primitives. That's basically all the "multi-paradigm" talk is about.

If someone is interested to seriously hack on Oz, I think Peter Van Roy [1] would be interested, esp. if you can pitch it as a research project somehow (easier to get funding). I can make introductions if necessary.

[1] [http://www.info.ucl.ac.be/~pvr/cvvanroy.html](http://www.info.ucl.ac.be/~pvr/cvvanroy.html)

</comment></comment></comment><comment><USER5> This is a genius writeup. My earlier limited experience with logic programming resulted in lots of confusion and "what's the use?". Because of this, I would probably have me not even click the link if the word "logic" had been in the title (and I suspect I'm not alone in that).

Instead, the author starts with the familiar concepts and very gradually and comfortably flows into logic programming concepts, making me go "hey! that's handy!". That's a feeling I've never had with logic programming before, and I didn't even give Cosmos a try yet.

Hats off! I'm definitely going to play around with this.

</comment><comment><AUTHOR> Thanks for the replies. A few comments:

1\. I might have gotten a bit carried away when writing some parts of the article.

2\. "Functors" are the same as functors from Prolog. Note that Prolog lists are functors too. They also may enable the language to have an 'Option' type like in some functional languages.

<comment><USER5> 1\. Please keep getting carried away

2\. I completely didn't understand how a functor can make a list. Note, to me, a functor is a C++ class that overrides operator(). I loved how your writeup allowed me to understand Cosmos concepts _without_ learning Prolog, so an introduction to functors (maybe a later blog post?) would be warmly appreciated :-)

<comment><USER6> Yes, C++ is notorious for abusing the "functor" concept in the way you mention. Compare the Wikipedia article: [http://en.wikipedia.org/wiki/Functor](http://en.wikipedia.org/wiki/Functor)

A better way to describe a class that defines the »operator apply« is "function object", as it is called in Lisp.

</comment></comment></comment><comment><USER7> It's really neat that someone is trying to make logic programming accessible, but the introduction and the first fews sections are really offputting. There are lots of highly performant new languages competing for attention, and statements like "Today I want to talk about programming. It is interesting to note that I have solved it. Yes, I solved it." will drive a lot of the potential audience away.

I recommend breaking this into two posts. One's a highly readable introduction to a new language (e.g. this post's 2nd half). The other's the author's opinions about the state of programming languages (1st half).

Well done for the technical work behind this project and the bravery for doing something about fixing problems you find in the world.

<comment><USER8> The Readme file at [https://github.com/mcsoto/cosmos](https://github.com/mcsoto/cosmos) is a nice concise introduction to the language. The blog post is more of a manifesto.

<comment><USER7> Ah right.. I read the post in isolation. Thanks for the reference.

</comment></comment></comment><comment><USER5> I was confused by this example:

        rel p(s, x)
         if(s = 'a') //this is sugar for [(s='a' and x=0) or x=2]
          x = 0
         else
          x = 2

Why does it transform to

         [(s='a' and x=0) or x=2]

and not

         [(s='a' and x=0) or (s!='a' and x=2)]

(or whatever "not equals" is in Cosmos)?

In any language I know, "else" means "do this when the guard was _not_ true", and not "nondeterministically maybe do this other thing instead, if you want". Did I simply misunderstand it? (note that I got lost at the "soft cut" part, but did I get it right that "choose ... else" is closer to what I'd expect "if .. else" to do?)

Given that accessibility to people used to imperative languages is a core goal, I'm not sure that the choice of making "else" mean "yeah whatever" is the best one. Maybe it's better to replace it by a different keyword entirely ("if.. or.." maybe). On a related note, just in case you're not familiar with it, I believe that maybe the "if.. fi" construct in Dijkstra's Guarded Command Language[0] is an easy way to get imperative-thinking people to embrace nondeterminism. It feels a lot like normal imperative "if", except there is no "else". If you want "else", you need to add another guard explicitly, with the negation of your first guard. This way, it's easy for people to grasp that the order of the guarded commands have no meaning. It also makes introducing nondeterminism very explicit.

[0] [http://en.wikipedia.org/wiki/Guarded_Command_Language#Select...](http://en.wikipedia.org/wiki/Guarded_Command_Language#Selection:_if)

<comment><USER9> You're thinking imperatively. It is not "do this" but "generate the set of possible solutions".

The "soft cut" part I'm presuming is similar to Prolog, where a "cut" indicates that once you've gotten past it, you can't backtrack (roughly - <USER2> knowledge of Prolog is rather limited) to try other arms - so "choose" is forced down one path by the guard, and then not allowed to also evaluate the other arm, while "if" can generate both alternatives.

<comment><USER10> I am somewhat familiar with declarative programming and Prolog and still don't get it.

The problem is there even without else.

        if (s='a')
            x=2

Should it be

        (s='a') and (x=2)

or

        ((s='a') and (x=2)) or (s!='a')

Because IMHO it should be the second one (it's also basicaly the logical definition of implication, which IMHO should be consistent with "if").

The first interpretation of if without else just give you another way of writing:

        s='a'
        x=2

so why "if" at all?

And if we take the second interpretation of if without else, then when there's else - it should also get the !if_condition implicitly.

<comment><USER11> "if" here isn't a perfect analog to a traditional imperative language's if statement.

A better set of keywords to describe the logic might be "when ... allow". Because there is an implication here, it's just in reverse.

Because the relation finds all possible solutions that meet the relationship, this code really reads "when s is the letter a, allow x to be 0, and call that a solution. Otherwise, any pairing where x is 2 is a solution."

So if you were to call p(s, 0), you would find that you only get one solution, where s must be 'a'. From an imperative-ish POV, that "sets" (constrains) s to 'a'.

OP is using if, _combined with the notions that you take only the first of all relation solutions, and that you treat the rightmost relation member as an output_ , to achieve an imperative-like behavior in a non-deterministic logic language. Which is mentioned in the paragraph following the example.

</comment></comment></comment></comment><comment><USER12> > If you only have a single feature then you only need to learn one thing and > it can only go wrong one way.

I beg to differ. You can definitely go wrong in more ways with Lua tables _because_ they stand in for modules, arrays, and maps.

<comment><USER13> Well, I've been writing Lua code for a few years now and I think that the ways you can go right with Table usage far outweigh any liabilities that newcomers to the language will suffer as they learn to do powerful things with the simple features. As long as you know what modules, arrays, or maps are, and what uses they can provide, then you can't really screw things up too much with the Lua table. But of course, that's expecting a lot from a modern language user ..

<comment><USER12> I don't disagree with any of that. I just think that combining concepts doesn't necessarily reduce the number of ways things can go wrong (even if, as you say, it increases the number of things that can go right as well).

For an extreme case of what I mean, consider Church numerals.

<comment><USER13> Well, tables can and do often "go wrong", but alas the success-case is rarely accounted.

I would warrant that there must be something to them, or else we wouldn't be discussing them as persistent features of a social phenomenon, which is something I think we all take for granted about software language: it is entirely social.

Whereas your extreme case is mathematically derived, our social habits occur because of decisions.

</comment></comment></comment></comment><comment><USER14>
        l = [1, 2]
        l = Cons(1, Cons(2, Cons))

Ah, my other car is a cdr. I almost longed for my lisp (scheme) days.

I quickly recovered, though..

<comment><USER15> Sorry you are mistaken, your CARs are numbers.

Your other CDR contains Cons. Which may just be a function.

<comment><USER16> "My other car is a cdr" is an old joke. It is a play upon a kind of humourous bumper sticker ("my other car is a Ferrari") which was popular at one time.

</comment></comment></comment><comment><USER17> Does Cosmos have any characteristics that would allow easy JIT speed optimizations? I would love to see language design go green by allowing easy optimizations that help us save both our valuable electricity and our time.

Are there design patterns that would allow us to more easily enable JIT for performance or even multithreading or GPU usage? V8, FTL and SpiderMonkey have all significantly sped up javascript performance making for much more efficient execution and better user experience. Python and PHP seem harder to adapt to JIT compilers as Facebook keeps working on HHVM for PHP and JITs for Python like PyPy lots of compatibility issues with existing libraries.

p.s. I for one really appreciate the entertainment value of exaggerated and opinionated style as long as the author realizes it is partly for entertainment, calls it out in the title and clearly isn't taking themselves too seriously. I already read enough serious and earnest tech articles...

</comment><comment><USER18> The idea of declaring a variable to represent a bunch of different values seems refreshingly different to so many popular languages today.

I'd love to see a few real world applications written in idiomatic Cosmos!

</comment><comment><USER19> Why do so many programming languages have common words or single letters as names? Doesn't that make it difficult to search for discussions on these languages? Why not Kozmoz instead of Cosmos?

</comment><comment><USER20> It is cute, but you can't design a language for toy problems or you run into problems with bigger software.

I kind of stopped reading here:

"Since it is declarative code, update returns a new world w2 instead of merely modifying w1. The funny thing is, just by doing this our code becomes 200% better. For example, you can now modify the code to store all world states in a list!"

Uh huh. Try doing that with a nontrivial game that needs to be performant, and let me know how that works out.

<comment><USER20> I should clarify before people respond antagonistically ... as someone who is designing a programming language, I think it's great any time someone is making languages and trying out new ideas. That part is great, if you want to make a functional imperative declarative loosely strongly typed language then hey, go for it.

But I think one has a responsibility not to try and sell one's project as something it's not, which especially means being careful with claims. I know this is sometimes hard because a lot of language design stuff comes from the academic community which notoriously overclaims (because it is their job to overclaim), and it is easy for that culture to rub off.

But if you are going to say something like "just by doing this our code becomes 200% better", with a straight face, about something that most practitioners know is going to be terrible in most cases without a tremendous amount of additional work and solving of unsolved problems (solution not shown), you're just telling the reader that they can't take you seriously. It's a bad thing to do.

<comment><USER21> > But if you are going to say something like "just by doing this our code > becomes 200% better", with a straight face

I think this is something a lot of people here are having a hard time with: The article is not being said with a straight face. The unsolved problem of elegant I'm-holding-back-a-funny-face font technology has confounded the Internet for forty five years and still counting.

</comment></comment></comment><comment><USER22> A fun paper, but it neglected to explain its means of modularization. I had to read the language implementation to discover the 'require' keyword used to import functions.

Projects like Mercury ([http://mercurylang.org/](http://mercurylang.org/)) are also covering similar space.

<comment><USER23> Michael Hendrix described Mercury as Haskell + Prolog, which is accurate, I think, and an indication that Mercury is pretty far removed from what Cosmos is trying to do. (I'm more interested in Mercury). Cosmos looks like it wants to be a multi-paradigm scripting language, whereas Mercury is aiming for logical purity (no cuts), strong and static typing, and high speed (...for a Prolog). I think Picat ([http://www.picat-lang.org/](http://www.picat- lang.org/)) or Ciao ([http://ciao-lang.org/](http://ciao-lang.org/)) are probably closer matches to Cosmos.

<comment><USER23> Sucks, cannot edit old comment. Correction:

Michael Hendrick: [https://www.youtube.com/watch?v=G_eYTctGZw8](https://www.youtube.com/watch?v=G_eYTctGZw8)

</comment></comment></comment><comment><USER24> Am I correct in saying that Cosmos is both Turing complete and incomplete? In addition, in the world splitting example, does this result in a fork or exec?

</comment><comment><USER25> I wrote quite a lot of TurboProlog code for a while some 25 years ago. I always wondered why there were no syntax sugar for nested 'or' Horn clauses.

Now it's fixed. Cool. So is the rest of Cosmos syntax sugar, cool, kudos.

I guess some OO would be a nice addition. And, that's the thing of the day: an efficient JS transpiler and a decent IDE with a stepping debugger. That's asking a lot. I know.

</comment><comment><USER26> Prolog is neat. There is probably a Prolog embedded in some of the C++ type checkers. The problem is that the world at large is often in a flux and can't be conveniently described in terms of static relationships, which makes Prolog programming at large challenging to do (or you augment Prolog with features that make it more or less imperative).

<comment><USER27> > The problem is that the world at large is often in a flux and can't be > conveniently described in terms of static relationships

Apparently there was work in the late '90's on accounting for this without `assert` / `retract`-style messiness: [https://en.wikipedia.org/wiki/Transaction_logic](https://en.wikipedia.org/wiki/Transaction_logic).

</comment></comment><comment><USER28> Any article that intends to explain why logic programming is the One True Way without covering "how to prevent super-exponential backtracking from eating your face" is missing an important part.

</comment><comment><USER29> So, you came out pretty strongly for strong typing. But you didn't include anything about creating new types. Did you not want to focus on that in this article or...?

</comment><comment><USER30> Is it just me or does this resemble visual prolog quite a bit? Though the syntax of Cosmos seems nicer, it seems as if most of the ideas are implemented in visual prolog.

</comment><comment><USER31> If your justification for creating a new language is "I made snake in a bunch of different languages!", I am extremely skeptical.

And, as is often the case, it is impossible to have a universally beneficial compromise in programming language features. There are some things you simply _cannot have_ if you don't lean strongly one way or the other, and you end up with a mediocre in-between with none of the benefits of either extreme. Case in point: type systems and the ability to compile to tight native machine code. In a dynamically typed/untyped language, you need to have multiple layers of indirection.

</comment><comment><USER32> I wonder why they're called functors.

<comment><USER33> It's a pretty overloaded term. I haven't looked into the Cosmos semantics much, but since it's mentioned in the "logic programming" part of the language, I suspect it's referencing the Prolog sense of the term: [http://www.cse.unsw.edu.au/~billw/prologdict.html#functor](http://www.cse.unsw.edu.au/~billw/prologdict.html#functor)

<comment><USER34> I believe this terminology goes back to Rudolf Carnap; it actually predates the use of "functor" in category theory.

</comment></comment></comment><comment><USER35> This is a good writeup but I have to say:

"We really can do anything. The sky is not the limit in Cosmos. We can go beyond into outer space."

*pukes

Good article so far, but that line smh

</comment><comment><USER36> A new programming language a day keeps the doctor away.

<comment><USER37> So true. I thought Spider Programming was the current best language ever, but apparently that is so 9 hours ago...

</comment></comment><comment><USER38> So I think that there are a lot of good ideas in here. Unfortunately, since I've never seen an application written in your language, I have no idea whether it's good or not.

Lemme tell you about TI-BASIC (for the TI-84). That stuff was the bee's knees. One day I wrote a really slow loop to translate whatever key was pressed into a number if the key corresponded to a button on the number pad. [1]

In JS the loop would look like

      var output = -1,
        codes = [103,92,93,94,82,83,84,72,73,74],
        pressed = getKey();
      for(var i=0;i<codes.length;++i)
        if(codes[i]==pressed){
          output = i;
          break;
        }

Way too complicated, way too slow for an interpreted game program on a 6MHz Z80. But TI-BASIC had some cool higher-order functions! It didn't even have to be a loop at that point, check out how succinct it became:

      var codes = [103,92,93,94,82,83,84,72,73,74],
        pressed = getKey(),
        digits = [0,1,2,3,4,5,6,7,8,9];

      var output = sum((codes == pressed)*digits);

(Yes, this isn't "really TI-BASIC" but that stuff is a pain to type on a computer. Sorry.)

How? `codes` is an array, which, when tested against a scalar, produces an array of 0 or 1 to indicate false or true. These, multiplied by digits, produce an array of 0 and a number that is pressed. The summation gets that number because adding by 0 just returns the number. (Also, getKey can't return more than one key at a time.) And because the loop happened inside the operators, the loop was run in assembly, which made it about 30x faster.

This is why I believe that TI-BASIC is the best programming language. (I don't, really. But I'm more believeable than the unexplained Functor malarkey and how it can somehow put me into _outer space_ ;)

[1]: [http://tibasicdev.wikidot.com/key- codes](http://tibasicdev.wikidot.com/key-codes)

<comment><USER39> Did you read the TFA? It linked to the cosmos implementation, along with the information that it was implemented in cosmos.

Here's one file from it:

[https://github.com/mcsoto/cosmos/blob/master/src/cosmos.cosm...](https://github.com/mcsoto/cosmos/blob/master/src/cosmos.cosmos)</comment></comment>


Johannes Kopf's Publications - Microsoft Research - <AUTHOR> http://johanneskopf.de/publications/index.html

<comment><USER2> Some interesting papers there (apart from the "depixelizing pixel art" we've seen numerous times here already): GigaPics, geometric transformations of images, sculpting, etc...

Don't forget to look at the video [http://research.microsoft.com/en- us/um/people/kopf/street_sl...](http://research.microsoft.com/en- us/um/people/kopf/street_slide/index.html) , this would be an awesome addition to Google StreetView: zoom out and the system makes a frontal view of the street side.</comment>


Passpack is not LastPass. The "Big Friend" approach - <AUTHOR> http://blog.passpack.com/2011/05/passpack-is-not-lastpass-we-have-a-big-friend/

<comment><AUTHOR> I was interested to know if someone other than Passpack uses the "Big Friend" approach to improve the security. Do you know other examples?</comment>


Founders/Leaders, how do you communicate with your team? - <AUTHOR> Curious about content, cadence and tools, as looking to build something in this space.
What works? What doesn't? How has that changed as you've grown? What's missing?
Quite a few questions there, but would love some feedback. <comment><USER2> Conversations during work. One one ones (I used to go for a walk with some members and we'd just talk. It was extremely practical especially during some hard times where you change the frame/context/place of the conversation and take it outside the office. The amount of things that would have went untold is impressive when you're far from a laptop you can hug and interruptions).

Emails. Putting thoughts processes, plan/roadmap, in writing exposes them to be deconstructed, torn down, reconstructed, debated, and assimilated. Strategy, business model, which features and why, what to ignore, what to focus on, tradeoffs, meeting notes they didn't attend with investors, prospect clients or partners, accounting or legal.

Wikis and knowledge bases. Each project has a wiki and whenever someone learns things that directly serve the project, they add it. To make sure I do it, I add issues to taskwarrior to decrease the friction to ingest/acquire info and useful things[0] with issues that say "Add X to Wiki" with tags and by project. Then move them from taskwarrior to the Wiki in a batch.

Working on a company Handbook which is a sort of "Operating Manual" for the company that contains as many details as I can on everything one needs to know to operate it (from legal information, bank accounts, hiring procedure and onboarding, firing, where to pay taxes, how to fill checks, etc.). I wrote these down when I used to do things myself so anyone who would help on these matters would know where to start.

Sharing what I learn with them and learning what they've learned in impromptu conversations or mini hacking sessions or code snippets. Talking shop, code reviews and refactoring, debugging together. Getting help from them debugging something and vice-versa.

Emails. Again. Writing things down. I'd think something has settled in until I'm proven it hasen't yet.

[0]: [https://news.ycombinator.com/item?id=21545767](https://news.ycombinator.com/item?id=21545767)

<comment><AUTHOR> Thank you for taking the time to write such a thorough and considered reply detailing your thorough and considered internal comms!

I'd love to know more about your email habits; seems super important to you as you've mentioned it twice. You mention a lot of the content you cover - do you do a weekly update that ties together all these disparate strands?

<comment><USER2> I mentioned it twice because it's a reference to repeating things to make sure they sink in. Also, it is easier to be analytic on someone's writing than verbal discourse. _Verba volant, scripta manent_. I can't back-pedal and say "Oh, I didn't mean this, I meant that" or "I never said that". I can't accuse someone of misunderstanding me, because I bear the burden to be clear. If my thought processes are flawed, the flaws are glaring and exposing them is easier if my thoughts are written.

Also, writing allows others to have time to thing about it, construct questions, etc.

I don't send emails weekly or on a schedule for now. I send three types of emails:

\- Synthesis: when a critical mass of information and insights has been reached that I feel we have to consolidate that into writing. What the product is, what it allows people to do, who it caters to, why it is needed, why we believe that, what are the components, what is the initial stack or architecture. This is the result of frequent conversations and spontaneous brainstorming, shower thoughts, night and week-ends musings, recurring frustrations, etc. All we have talked about or imagined is synthesized in that email, that will find its way into the wiki and the product's documentation. It takes the form of a product pitch/pitch/documentation before the product is finished or started. We'll talk about it as if it existed.

\- Shift emails: Sent when taking a turn, notwithstanding whether information has reached critical mass or not. As we move along, the product/offering/company shifts. Mini-pivots if you will. Shift emails are essential because we can't afford to have someone building tomorrow's product and another building yesterday's product because they didn't "get the memo". These emails serve to align people and make sure we work in the same direction, whether for a week or a day or a month doesn't matter. Whether we're going the wrong direction doesn't matter much. It is easier to change course if there actually is a course we're following. It's good it is in writing because it's easier to correct something that's written as the thought process is externalized, than it is to correct words in the air.

\- Announcements/Status: Meetings with potential investors or partners, why we are meeting someone, what's the objective, and meeting notes so what has been talked about is captured and the actions to be taken can be checked for done/depend on other action-person/cancelled, etc. Changes in work regimen (for instance, I just sent a message to work one day remotely to test a hypothesis of non linearity of recovery time vs commute-free days) after floating the idea that it might be interesting to have one day we work remotely. We usually work remotely from time to time, but not all at once.

Sometimes, we'll have a lengthy conversation on our channels and the exchange is either dense with points, counter-points, and ideas that it will find itself synthesized and in the wiki.

The reason we are doing something, what the problem is, why it's a problem, and what we plan to do about it, are points that I consider important to share.

One thing I have forgotten to include is commit messages and code documentation. We write commit messages to include root cause analysis, why something was changed and how, the lessons learned, the thought process/flawed reasoning/assumption that introduced the bug. I view commit messages as something I can learn from and improve how we make software. When we started doing this, the flaws became blatant as we were fixing similar bugs or making similar changes. Patterns emerged and we fixed the root causes. Here's a banal example:

      commit 382afdc5eed2478d8cfa4b6fe5e64eb26e7fdff3 (tag: v1.0.58)
      Author: Jugurtha Hadjar <XXXXXXXXXX>
      Date:   Tue Jan 2 02:13:10 2018 +0100

          Closure for #153, #310, #311.

          The difference between #310 and #311:

              The first case was in the context of `create_form`, which means that it
              wasn't until you wanted to create a Task Template that you had a problem.
              i.e: it wasn't until `TaskTemplate.create_form` was executed. Which means
              you just had a builtin ValueError that's easily fixed.

              The second case was in the context of *class instantiation in TaskTemplate.__init__*,
              which means that the instance of the class can't be created, which means that adding
              the TaskTemplate route to admin in `app.py` will fail, and with it the routes added
              after it.

          So why was this different? They both should have been ValueError for trying
          to unpack the wrong tuple to the wrong variables.

          The reason is that, after cleanly handling the case where a database is down by
          catching the proper exception (sqlalchemy.exc.OperationalError), that is #153 in commit
          3327929d74911b999638e4902a9662366dd42c7d, several other handlers were added.

          In a subsequent commit, the exception handling in a try..except clause was delegated
          to a custom handler, `db_down_handler`, and the exception caught in the try..except
          clause was changed to catch Exception and silencing it without logging.

          Silencing exceptions is fine as long as you know why you're doing and explicitly do
          so with a safety net of sorts (like logging/warning).</comment></comment></comment>


Global spy system ECHELON confirmed at last – by leaked Snowden files - <AUTHOR> http://www.theregister.co.uk/2015/08/03/gchq_duncan_campbell/

<comment><USER2> This very same story (but on firstlook.org) has already been posted and heavily commented on here: [https://news.ycombinator.com/item?id=10000428](https://news.ycombinator.com/item?id=10000428)

<comment><AUTHOR> I did use the search function to search for ECHELON before I submitted, but that thread didn't showed up, probably because it doesn't mention ECHELON in the title.</comment></comment>


Play roguelikes via SSH with shared scores - <AUTHOR> http://roguenex.us/ <comment><AUTHOR> I was looking for some other 80x24 roguelikes accessible via SSH and stumbled across this. You can of course play all of these over your own VPS, but I wanted this for high score reasons.

The games and what's shared are:

* ADOM: shared highscores and memorial files

* Angband: shared highscores.

* Brogue: weekly seed competitions, shared highscores.

* Cataclysm-DDA: Shared maps for concurrent play, shared memorial files

* DCSS

* Poschengband: shared highscores.

* The Slimy Lichmummy: shared memorial files.

* Sil: shared scores and memorial files.

Appears that not all are 80x24 accessible, like Brogue. ADOM requires 80x25, also.

> ssh email@example.com (pass: player)

To ramble on more: there are other services like this but focusing on a single game and will be much more populated:

* [http://nethack.alt.org/](http://nethack.alt.org/) (ssh email@example.com)

* [http://crawl.develz.org/wordpress/howto](http://crawl.develz.org/wordpress/howto) (a whole bunch of DCSS servers scattered around the world)</comment>


Google's iPhone tracking bypasses users' privacy settings - <AUTHOR> http://whenisapartynotaparty.wordpress.com/2012/02/16/lord-of-the-blogosphere-an-interesting-and-timely-update/

<comment><USER2> Please downvote this linkspam.

Real article: <http://news.ycombinator.com/item?id=3602069></comment>


Agile: 5 years later and you're still doing it wrong - <AUTHOR> http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html <comment><USER2> Yegge, as usual, is hyperbole and a half. Don't get me wrong, I like his writing. I liked it more when I was younger, but I still enjoy it.

I have to say though, after working the last 3.5 years in an organization that Yegge would categorize flatly in Bad Agile, first as a developer and now as a PM, that I disagree. Plainly, his hyperbole and name calling doesn't open up for a constructive debate but I'll give it a try.

We do iterations, retrospectives and kaizen, automated testing (yes, part of XP), user stories and more. A few people practice TDD or pair programming. Importantly, all of this is voluntary - after five years of experimenting with process, tools, methodology we've found a set of things that work for us and help us deliver software with high quality and on time. It just happens that the tools we use fit in the Agile and XP umbrella. And if we look back five years to the pre-agile days and start looking at delivery times, quality (in terms of defect rates, patch releases, …) and customer satisfaction, they've trended continuously upwards and in a big way.

I'm not sure what we're doing wrong and why, and I'd like to have that explained to me.

<comment><USER3> I'll offer my 6am reasoning-by-analogy commentary in a slightly inflammatory style to keep the mood. Your third paragraph, if you change all the keywords, looks like something a converted Scientologist might say! All your friends tell you it's stupid and give you reasons why you should be unhappy ("Look at how much money you're giving them!") and so forth, but by golly, you look back at your life just a few years ago and things seem so much better now! You don't feel like you're doing anything wrong, and by objective accounts if you're genuinely happier you probably aren't doing anything wrong in the grand scheme of things. Why wouldn't you feel good supporting your Church with huge sums of your income anyway?

In short, the brainwashing worked and you're under the influence of a beneficial placebo effect. Maybe the placebo effect is what explains the 10% "success stories" of not-screwed-up Agile Teams that Yegge hints at.

Or not. I don't know. I do know that for me any productivity hacks are temporary at best and ineffectual by default, and I'm wary of ones that have been actively dangerous for a good number of people; when akrasia is solved in general humanity will rejoice...

<comment><USER2> Ok but I believe the burden of proof is on you. I'll claim that adhering to some principles has given us quantifiably better results, and that the time scale is long enough that any Hawthrone Effect would've worn out by now.

Also, "productivity hack" is not a label I'd use to describe e.g. automated testing. YMMV.

<comment><USER4> Actually, the burden of proof should be on you. The null hypothesis is that adhering to agile principles has no positive affect on the outcome of software projects. In order to show that these principles have worth, you should disprove the null hypothesis.

<comment><USER2> I disagree. I've laid out my arguments best as I can, pointing to how we've measured and that we've seen improvements. In response to that, the commenter compares the post to scientology.

The hypothesis under discussion here isn't "these principles have value", it's "even though implementing these principles gave measurable value, they're still snake oil comparable to scientology".

</comment></comment></comment></comment></comment><comment><USER5> As an enterprise developer (i.e. one of the guys working in the big, non- technical companies) I have been one to advocate and implement parts of agile on various projects. I will fully admit that Agile is mostly hype and that adhering closely to any methodology is mostly, if not entirely, futile.

Steve and others are missing the point, when done right it forces conversation and it gives programmers a voice. In big non-technical companies everything is top-down, date-centric and programmers are just cogs. When we did agile, we essentially had some basic sprinting (make date people happy) and a strong feedback loop (give developers a voice after each sprint) and those two simple steps produced some amazing work.

Dates will never go away in these kinds of companies, programmers will never be first class citizens, and some sort of process will always be demanded. Agile is not about how to get developers to be more efficient, it is about getting large non-technical organizations to bend (ever so slightly) to the will of the people actually producing the work.

<comment><USER6> This is exactly the environment that agile is designed for. It's oriented around getting to a state of producing results in teams with low cohesion, poor communication, and ineffectual or non-technical management. The problem is that people see agile as a one size fits all solution and try to shoehorn it into situations where it's not helpful. Even worse when people misapply the core concepts and it becomes just another excuse for micro-managing.

</comment></comment><comment><USER7> I think there's a lot of truth in this (though as with all opinion pieces, esp. seriously entertaining ones like Stevey's, you have to take it with several pinches of salt).

I have a suspicion that a lot of agile is a hack designed for managers who have problems within their team and don't want to deal with them properly.

It's far easier to adopt a 'proven' methodology than confront the fact that Frank in accounts has unrealistic expectations and changes their already vague spec 30 times while expecting the estimate not to change, or that Peter is driving down morale in the team by nitpicking every last mistake you make while ignoring his own, or the constant denial of the impossibility of actually consistently correctly estimating tasks which have _never been done before by anyone_.

Dealing with those things well takes real skill, patience + awareness as well as a willingness to accept reality and eschew politics, and that's just hard.

What I particularly dislike about agile is the unfalsifiable _dogma_ of it - you MUST do it like this otherwise it won't work and it will be YOUR fault for not having done it properly. If it works then of course it's all agile. That's a big problem - everything you do in a team should be for reasons and open to discussion otherwise you end up with cargo cult programming and cargo cult software management.

All that said, _if_ you take agile not as a dogma but a series of methods that people have found useful and adopt it to your needs, while not avoiding the realities of the situation, then I can see how it can provide prompts for improving a team.

<comment><USER8> The original agile manifesto was definitely not a dogma.

If someone presents it as such today, you can usually follow the money pretty easily to figure out why.

<comment><USER9> God yes - While working at a large bank I once saw an Agile consultant give a presentation to us. His words: "We find that when teams aren't succeeding with agile it is because they had only adopted some of the agile processes instead of all of it and that hadn't been trained properly by an expert "

I threw up a little.

<comment><USER10> This is PRECISELY what you hear from folks who are trying to sell you religion, or stuff like EST.

"Of course it's not working, you're not doing it right. We'd be happy to work with you some more on that."

Followed by the "ka-Ching!" as they cash your check for the consultancy.

Agile is so often turned into a micromanager's paradise that I've just stopped involving myself in it. Our team holds scrums, none of the engineers show up. It's pathetic.

<comment><USER11> You'll hear the same thing about any difficult discipline. Surgery, painting, programming, auto repair, biological experiments, chemistry, mechanical engineering, and so on.

</comment></comment></comment></comment></comment><comment><USER12> This isn't about agile. This isn't about methodologies. It's about one basic principle that's true in every industry, for any and every management system:

PROCESS IS NOT A SUBSTITUTE FOR LEADERSHIP.

No set of rules can compensate for bad management and employees. Rules usually empower bad managers and disguise bad employees. No methodology -- agile or otherwise -- can stand up to bad execs, bad project leads and/or bad coders.

It starts with hiring. That's how Google gets away with loose rules -- they prioritize hiring "Google-level" coders and managers. All else is details.

<comment><USER13> > PROCESS IS NOT A SUBSTITUTE FOR LEADERSHIP.

Choice quote, though you're quoting yourself. :) Your original write up "enough with the meetings are toxic" was a nice read from 2006 too! <http://goo.gl/U9Ysi>

<comment><USER12> WOW, I had NO IDEA that was still out there. I guess nothing ever dies on the internet.

</comment></comment></comment><comment><USER14> TL;DR _Google is awesome. Agile is bad and stupid and for stupid people, but when Google does it it's great, because Google can do no wrong and is NOT EVIL and did I mention awesome?_

I agree that "Methodologies" with a capital M are probably a scam, and that Google is probably full of super-smart developers that do fantastic work when left to their own devices — but I knew that already...

<comment><USER15> I think that's the key piece. Yes, Google can operate the way they do because they have world class talent. Literally some of the best developers in the world. If you find yourself in that situation, then yes, you too can do things the way Google does.

Being a contractor and working in the bowels of Fortune 500 software divisions has taught me that this is a pipe dream for almost every other company. The methodologies (Agile, Waterfall, whatever) were no doubt created in order to help teams of poor to middling developers actually accomplish something while fighting through the corporate red tape and their own stagnation.

I've seen the kind of "Bad Agile" he talks about work at big inflexible organizations, and I've seen the "let everyone work on what they want" style of development go catastrophically wrong. Yegge's post seems to be more about him congratulating himself on how awesome he is for working at Google.

<comment><USER16> It's not just about the level of talent but about what Google can afford to do. Google banks so much cash from search advertising that it can bankroll all of these other internal projects that might not impact revenue at all, and their cashflow and stock price is so high that no one is stressed about costs or deadlines. As Mel Brooks's said, it's good to be the king. If Google was pressured by competitors and falling stock prices you would quickly see the whole picture revert to the traditional management-says-get-this-shit-done-now project management.

</comment></comment></comment><comment><USER17> As the article touches on, Agile discussions seem to often rely on the "No True Scotsman" fallacy -- if it doesn't work, it wasn't _really_ Agile, so the definition becomes slippery enough to evade a lot of criticism.

I think that, because of this, trying to push the umbrella term "Agile" makes it more difficult to evaluate the sum of the ideas than if you were to evaluate each idea on its own merit. Each person can claim some permutation of the sum parts (and even add some more), and assign them the title of "true Agile".

It's something I saw when I was going through SOA training for work as well. There's those that swear that heavy contracts are required for "true" SOA, and REST can't provide those. And there's those who swear the focus should be on the "service oriented" aspect without all the SOAP overhead, and that core is the "true" SOA. Personally, I try to avoid using the term "SOA" now and just stick to the technical description of what I'm talking about.. hell, I'm almost afraid to put it on my resume.

</comment><comment><USER18> This is how my previous company (a great bunch) implemented SCRUM. My CEO came to me and asked me this:

"Thomas, we want to increase our revenue so we need to differenciate ourselves from other consulting firms. We need our services to be top-notch. Our customers don't know anything about Agility and processes such as SCRUM but I think I can sell them that. What can you guys do to help sell this?"

To which I suggested: "we can pretend we're doing a variant of SCRUM and label it '{{nameofcompany}}scrum'. I think a board in the middle of the openspace with neatly arranged coloured post-its will do the trick."

He said: "Great, thanks", then proceeded to increase our average daily rate by 20%.

Once a cowboy, always a cowboy... Oh and by the way, it worked.

Agility, as in the Agile Manifesto, simply works on its own. It might not define good practices, but at least it defines a set of good intentions and it's a working strategy that's simple to explain to team members. Everything around is nothing but ways to make more money, not ways to make projects work. My philosophy would be to sign the Manifesto (because it's good) and pretend to implement one of those methodologies (because it's cash), while you keep doing your job well in the way that best suits you (because that's what makes you happy).

<comment><USER19> A detail: Scrum is not an acronym but a name derived from a rugby term, it should not be written SCRUM but just Scrum.

(Great story otherwise)

</comment></comment><comment><USER20> _Fat, bad. Cholesterol bad. Salt, bad. Everything, bad. Nowadays, though, they differentiate between "good" cholesterol and "bad" cholesterol, as if we're supposed to be able to distinguish them somehow._

Screw this guy and this kind of anti-intellectualism that makes it cool not to learn about stuff. "Why should I have to know anything about biology?". I don't care that it's only part of the intro, this kind of thing reinforces the kind of self-important "customer-is-ALWAYS-right" righteousness that glorifies ignorance. It makes me angry that people get away with shit like this.

</comment><comment><USER21> From my experience with Agile, I believe that most companies do it wrong. I know my company does. But it helped us dig 2 projects out of the never-ending abyss of scope creep and constant end-user changes when we converted to Scrum. So when I hear "you're doing Agile wrong" it makes no sense to me. You make what you can out of it. You mold it to fit your practices. It will most likely never work for you out of the box and it takes time... it just does.

Honestly, I didn't even get to the end of the article and stopped soon the author started glamorizing Googlers. I was more offended with "Google does it right and you're wrong" and calling everyone in the world stupid than by the author rendering the whole Agile practice useless.

</comment><comment><USER22> Amen to what Steve says about a work queue. I've been in environments where, more than once, a dialogue with my manager would go like this:

Me: "My to-do list is empty."

Manager: "Oh, umm, let's have a meeting to talk about that... [consults calendar...] the day after tomorrow." Or even: "Yeah, I know, I'm still looking for something for you to do."

Now, if I had cast-iron balls, or an amulet that gave me a +5 bonus on my saving throw versus layoffs, I would respond to that with "OK, I'll just stay home tomorrow and check email on my laptop every few hours, just in case something comes up." But that's not how the game is played, of course.

<comment><USER23> Since late October (end of previous release) I've been mostly doing make-work: test scripts, some individual investigation, reading up on standards. Why? Because upper management haven't decided what is going into the next release. I've finally given up trying to get answers and I've made the decision myself. Any direction is better than no direction.

And the bizarre thing is they are totally obsessed with "keeping the sales pipeline full" but can't see that the same can apply to development. No doubt someone will make a decision in a while and we'll be under severe pressure to catch up on the lost months.

<comment><USER24> If you consider writing test scripts "make work" you're really wasting an opportunity.

<comment><USER23> I wasn't very clear: the test scripts were to see if I could provide a unit test framework for the internal scripting language (not actual product tests which are obviously a productive part of development). It's interesting to _me_ (which is why I did it) but since it won't ever reach a customer it's basically just to fill my time

</comment></comment></comment></comment><comment><USER25> First, this is a five-year-old article. And a dupe.

Second, let's get definitions straight. Agile is best practices around iterative and incremental development. The word is a marketing term and can cover all sorts of different (and contradictory) concepts. Scrum is a certified way to manage Agile projects. You write a check, there's a board, a class, and a nice little certificate you get.

So it's really hard to jump up and down and yell too much about "Agile" -- the term is just too slippery. (I note he includes a picture of a ScrumMaster class) Or to put another way: ten years ago companies hired me because I was really good at running iterative and incremental projects and could not only do it well, but help train project managers and teams. Now the same companies hire me for the same reasons, but the word "Agile" is attached. If you want to slam all external consulting as being a waste of money, that's fine, but let's be clear what you're ranting about.

Second, because it's best practices, not all of them are going to work for you. And as you grow, you'll find out how to use some (and ignore others). Hell, I'm still struggling with TDD. But I grok pair-programming: it's the same kind of coding you did in college where a couple of people would sit around figuring out a problem. It combines the code review and the code creation into one step -- brings the review as far forward as possible, so there's no wait. Would I do pair programming all the time? Shit no, but does that mean I should make fun of it? Not unless I want to sound like an idiot in ten year's time.

The biggest point to be made here is that _Agile adoption is not the same as Agile principles_. Agile adoption sucks -- it's full of zealots, religious wars, highly-priced seminars, and feel-good happy talk. It can be just another way for management to micro-manage your project. The terms can mean different things to different people. Consultants make lots of money and provide very little value. And so on. Trust me, I know this: [http://www.whattofix.com/blog/archives/2010/09/agile- ruined-...](http://www.whattofix.com/blog/archives/2010/09/agile-ruined- my.php)

But all of that is just a study in how screwed up most organizations and movements are. Agile as a set of best practices is awesome. If I want to learn about data modeling, I'm buying some kind of book with a title like "Agile data modeling" because I know it's going to have an incremental and iterative context -- I won't have to do as much mental gymnastics to fit it into what I'm doing. (Disclaimer/shameless plug: I just published the first in a series of e-books to try to teach people without them having to pay so much for consulting. <http://tiny-giant-books.com/scrummaster.htm>)

Agile adoption has generated a lot of hate. That's a shame, because as Steve points out, there's good in there too. (Although he's not hitting on a lot here, the article is nicely done)

<comment><USER26> > First, this is a five-year-old article. And a dupe.

I believe this is why the title is "...5 years later and you're still doing it wrong". It's probably worth discussing why things haven't really changed in the past 5 years regarding this.

<comment><USER27> The title was confusing. I thought it was a new article, looking back over 5 years, not a 5 year old article.

</comment></comment></comment><comment><USER28> This reminded me of the keynote Andy Hunt gave at Ruby Midwest last year entitled "Agility Undefined - Becoming Uncomfortable with Agile". Here's a video of it, for those who missed this awesome conference:

<http://www.confreaks.com/videos/770-rubymidwest2011-keynote>

</comment><comment><USER29> _Back in Ye Olden Dayes, most companies approached software development as follows:

\- hire a bunch of engineers, then hire more. \- dream up a project. \- set a date for when they want it launched. \- put some engineers on it. \- whip them until they're either dead or it's launched. or both. \- throw a cheap-ass pathetic little party, maybe. This step is optional. \- then start over.

Thank goodness that doesn't happen at your company, eh now? Whew!_

Actually, that describes my company to a T. I think its more to do with working for a manufacturer, since my company is technical, and working in defense.

Oh, and in our case, "start over" means "find something we did in the past that is kinda sorta like what we need to do now and force fit it to the problem as quickly as possible".

</comment><comment><USER30> Agile techniques make good teams perform better. Scrum makes it impossible to hide from problems for more than a month. It doesn't solve the problems for you. Scrum makes failures faster so that errors are minor mistakes instead of yearlong catastrophes. Scrum is not micromanaging, it explicitly empowers the contributing team members to manage themselves and each other. No one ever sold agile as a way to make bad teams perform well. I have seen Scrum (as practiced by a team that read a short book and sat in a one day training and bought in to it with an open mind) make made my team deliver better work in a more satisfying way.

</comment><comment><USER31> Cool article but I'd just like to know why stand-ups have to be in the morning when I'm still getting into the groove of things. Why not end of day, all day you're waking up and building to that brief stand-up and it's either hey I need help or hey look what I/we got done.

For that matter what if people have a good medical reason for not standing, does that mean stand-ups are an implicit form of discrimination against older coders?

</comment><comment><USER32> I like the part about modeling work tasking on priority queues. I use org-mode a lot and having a few org-mode (Emacs package) files like priority1 and priority2 and manually keep the most important stuff at the top would work well. That said, right now, in addition to project specific org-files, I keep one special org-mode file that are my 4 or 5 top priorities and for a one-man consulting shop that is enough process :-)

I also liked the opening SCRUM quote from wikipedia. I have experienced "over- SCRUMing" first hand at one of my customers. Daily SCRUM meetings may seem like a good idea, but if not tightly controlled they can take up a _lot_ of time.

</comment><comment><USER33> So Google is an engineer's dream and everyone is so nice and there are huge incentives and all that, ok... but if that works so well, why have they failed to come out with another product that is unquestionably as successful/profitable as their advertising platform has been? (the core of which they didn't invent, they stole it from Overture)

Just saying, if you take Google and you remove that particular aspect of their business, there would be no business. So like, 90% of the engineers' efforts account for what, like 5% of the profits? Hardly an approach worth emulating unless your startup happens to have a golden egg laying goose like Google.

<comment><USER34> Jobs created the Mac, and the iPhone. I just recently went back and re-watched the original iPhone keynote, and I believe this is very much a theme of what he was saying on stage.

Making something new, at world class quality, is incredibly difficult.

</comment></comment><comment><USER35> I've been promoting of Agile practices for many years. But, lately I have seen several cases of non-technical people hijacking Agile. Suddenly they become "Agile experts", they don't care/understand about continuous integration, regression testing, technical excellence, etc. Agile was a developer flag, but now it is being used to beat developers by the same people that never understood the nature of software development.

</comment><comment><USER36> I'm just wondering how they manage those bonuses. Wouldn't it get kind of political? Or do they have some kind of arms-length system?

<comment><USER37> I can tell you how _I_ would do it, which would be to have as strong a tie as possible between 'Project X' and 'Revenue generated by Project X'. If it's true that most projects that get launched are launched by small teams, then the problem isn't much more complicated than that (divide the bonus equally between the members of the team, or in proportion to how long they worked on the project). If the teams are larger, you need to allocate bonus pools for the managers/tech leads to divide amongst their team - and that could get political.

<comment><USER38> > to have as strong a tie as possible between 'Project X' and 'Revenue > generated by Project X'.

At Google, that would mean the only teams to get bonuses would be teams working on Adwords.

<comment><USER39> Yeah, it's a pretty bad suggestion. Many projects don't directly generate revenue. It ignores practically all support projects that help people to do their job (i.e. improving the bugtracker, sales software, test software etc).

</comment></comment></comment></comment><comment><USER40> A parameter the author is not mentionning is the "smartness" of the ingeneers. When you have smart ingeneers they can mange their own work themselves, identify good idea from bad one, etc.

But I have heard rumors that what is described in this article about google way of running things is not true anymore. Can anybody say something about this ?

<comment><USER41> Not much of a biggie, but is engineers not ingeneers. :)

<comment><USER40> Sorry, my bad. I'm French and mixed-up spellings (ingenieurs in French). I can't edit the comment. It is good to point it out so that people don't make the same mistake.

</comment></comment></comment><comment><USER42>
      > developers are strongly encouraged to spend 20% of their time
      > working on whatever they want, as long as it's not their main
      > project.

Did the 20%-whatever-you-want benefit survive the "more wood behind fewer arrows" policy?

</comment><comment><USER43> Great article until he mentioned Google as a shining beacon of developer fulfillment. I know a few developers in Google (Ireland) and they're made to work huge hours. I'd rather have free time than free pizza.

<comment><USER44> ++ for free time over pizza

</comment></comment><comment><USER45> Sadly Agile has indeed jumped the shark.

I have always seen Agile as a way to fight the Waterfall process. Another way to see it is to add professionalism and discipline to companies who don't have things like unit testing, code reviews, etc.

In his long write up Steve made two points which I think are the most important:

1\. Waterfall is known to be bad; I _hope_ we can just that as an axiom today.

I added the emphasis on 'hope'. I hope so too, but I'm afraid the end of Agile might mean the triumphant return of Waterfall.

2\. _Google is an exceptionally disciplined company, from a software- engineering perspective. They take things like unit testing, design documents and code reviews more seriously than any other company I've even heard about. They work hard to keep their house in order at all times, and there are strict rules and guidelines in place that prevent engineers and teams from doing things their own way. The result: the whole code base looks the same, so switching teams and sharing code are both far easier than they are at other places._

Google sounds like an exceptionally disciplined software-engineering company indeed! This to me implies they do NOT need Agile.

Why would you introduce something designed to professionalize software- engineering to a company which is super disciplined and professional? You wouldn't! The only thing you can introduce is bullshit like 8:00 AM meetings. No wonder Steve hates Agile so much.

But again, everything he says about it being an infomercial and aimed at stupid people is _true_. But it is still a God send if this meme virus infects a death march plagued Waterfall process which does not use unit testing or even has source control.

Now why would a good developer be suck in such a place? Well maybe you live in an area where there is not a lot of tech. industry and jobs. Maybe you live there because all your family and friends are from there. Maybe your child has severe asthma and you can't afford to leave the gold plated health insurance plan from your corporate job in a non-software company that's big enough to have a software department.

I can't quite imagine how Agile could help a company like Google. But I know how it can be a great benefit to much less disciplined companies.

And I really do fear that the end of Agile means the return of Waterfall. Because Waterfall intuitively makes sense to people who don't understand software engineering. And there are a lot of them outside of silicon valley.

And Waterfall doesn't just plague obscure places with no tradition of technology. The US north east, home to MIT, IBM and formerly DEC, Waterfall has always been big out here too, and it's not because we're not smart.

<comment><USER46> > Google sounds like an exceptionally disciplined software-engineering company > indeed! This to me implies they do NOT need Agile.

This implies discipline and Agile (big 'A') are mutually exclusive. From my experience you have to be very disciplined to do Good Agile (and I have experience of Bad Agile too).

<comment><USER45> _This implies discipline and Agile (big 'A') are mutually exclusive._

No, I would say big 'A' brings discipline, but if you already have tons of discipline, it can't add any more.

</comment></comment></comment><comment><USER47> You are not true Agile if you know what you are talking about more than 50% of the time.

</comment><comment><USER48> 5 years later and Steve Yegge still reads like a teenager.

</comment><comment><USER49> "I love google and don't understand how cholesterol works."

Interesting.

</comment><comment><USER50> That is the lamest takedown of pair programming I've ever seen. I don't even do it, I don't even like doing it, but I know that the justification for it was never "more is better", and so does Steve.

</comment><comment><USER51> It's really sad to read this and see what Google used to be, and to compare that to what it has become (although it's possibly still that way if you're in Mountain View and Staff SWE or higher.)

</comment><comment><USER52> Disappointing Steve Yegge rant on Agile. TLDR: Agile sucks, but I've never done it, now I did it, it's pretty good.

Google does Agile OK, but I wish Steve Yegge could see Agile @patientslikeme - no BS, lots to love - it'd be a very different blog entry.</comment>


The Arctic Is Warming Much Faster Than the Rest of Earth - <AUTHOR> https://www.wired.com/story/the-arctic-is-warming-much-faster-than-the-rest-of-earth/ <comment><USER2> > Those are some of the results of a new study published today in the journal > Science Advances that reports the Arctic has warmed by 0.75 degrees Celsius > (1.35 degrees Fahrenheit) in the last decade alone. By comparison, Earth as > a whole has warmed by nearly the same amount, 0.8 degrees C, over the past > 137 years.

I can think of two issues with statements like this, especially the second part:

1\. Measurement techniques have changed a lot over the last 137 years. Just reading the article, it's far from clear _how_ these differences are accounted for.

2\. The chart [1] in the linked original source ([2]) shows no error bars. The chart is trying to lead the reader to the conclusion that something new is happening. However, without error bars, there's no rational way to arrive at that conclusion.

[1] [https://advances.sciencemag.org/content/advances/5/12/eaaw98...](https://advances.sciencemag.org/content/advances/5/12/eaaw9883/F1.large.jpg?width=800&height=600&carousel=1)

[2] [https://advances.sciencemag.org/content/5/12/eaaw9883](https://advances.sciencemag.org/content/5/12/eaaw9883)</comment>


Winters are cold. Youd like to see hobos clad in your rival schools jackets. - <AUTHOR> http://hobojacket.tk/

<comment><USER2> This is the second (that I've seen) submission of this horrifying idea. Classifying the commodification of homeless people is beyond politically incorrect- it's inhumane and representative of a total lack of perspective typical of so many of those who are privileged enough to attend institutions like MIT. For those behind it: adding a disclaimer to your site that suggests your actions are in good faith only further confirms, to me, your total lack of awareness about what it means to be disenfranchised in this society. Instead of resubmitting this link after your first entry got so much flak, why don't you try and exhibit even a minor degree of awareness and take the site down? You're shaming yourselves and your institution.

</comment><comment><USER3> I had this idea before (at conferences...pay the homeless spangers near Moscone to wear your competitors' items), but figured it would be cruel.

Although I wouldn't have a problem with it if a homeless person himself got entrepreneurial and offered people money to wear shirts advertising their competitors.

</comment><comment><USER4> Of all the ideas in the world to implement how could you possibly come up with this? And to the submitter, I guess this is a Meteor app (and hopefully that's where the connection starts and ends), but this suggests really low empathic intelligence on your part too. Just shameful!

<comment><AUTHOR> You're jumping to conclusions and it's insulting. I posted it because I thought it worthy of discussion. Here are some of the reasons:

1: It's gotten use, and you can look at the leaderboard to see where. I'm certainly not proud to see MIT at position #2, but I also wonder about the 99 jackets donated by students at a Roman Catholic seminary.

2: I think it is interesting to trace the author's moral development, which you can do at <http://hobojacket.tk/story.html>

3: Previously in history, an explicit purpose of the educational system was to develop an individual's moral sense. On HN many commenters seem to think of school as a place to learn technical skills, or as something to be skipped altogether if one is ambitious. Don't you think it's worthwhile to discuss the consequences of that attitude?

</comment></comment><comment><USER5> No.

My lack of a sense of humor notwithstanding, this is insulting.

</comment><comment><USER6> It probably sounded good when they came up with the idea whilst drunk.</comment>


Protip: Do Not Post A Pic Of A Pile Of Cash To Facebook - <AUTHOR> http://techcrunch.com/2012/05/28/protip-do-not-post-a-pic-of-a-pile-of-cash-to-facebook/ <comment><AUTHOR> I wonder what this really has to do with Tech. Seeing Techchrunch posting such stuff is disheartening :-(</comment>


Show HN: Stack News – Feedly for your tech stack - <AUTHOR> https://stackshare.io/news <comment><AUTHOR> Hey everyone, I'm part of the StackShare team.

I was the lead on this product. I worked on a really minimal version of this as part of our internal hackathon. It was pretty simple: look at the HN Algolia API, Reddit API, and a bunch of RSS feeds to pull in news based on the tools.

We ended up really liking the MVP and getting it out to users, who loved it. We've added a bunch of features post-MVP, and now we're really excited to share it publicly. I use Stack News first thing in the morning to catch up on tutorials and news for the tools I use day to day, I really enjoy it.

The team and I are around to answer questions so fire away!

More details on why we built this: [https://medium.com/@stackshareio/introducing-stack-news- goog...](https://medium.com/@stackshareio/introducing-stack-news-google- alerts-for-your-tech-stack-6d70a3a7f04d)

</comment><comment><USER2> This is cool! Much easier than trolling to domain specific blogs. Gives a way to stay on top news relevant to the stack I care about - sweeeeet!

</comment><comment><USER3> I thought about making this a year ago but I'm working on another project. I'm glad someone made it.

</comment><comment><USER4> Been following stackshare for a while and this is a really exciting new update. Congrats to Yonas and the team!

</comment><comment><USER5> I love it</comment>


4 developers picking a random restaurant (Problem) - <AUTHOR> https://lulucid.com/developers_picking_random_restaurant.html <comment><USER2> > _2) I told each of the developers should run "echo $RANDOM" and then > multiply them all._

This doesn't work very well, because the distribution would be very uneven.

There is a high chance (93.75%) that at least one of the developers get an even number, so if you multiply them you will get an even result. Moreover, if some of the developer get a multiple of 4 or two of them get a multiple of 2, then the result is a multiple of 4, so the restaurants with a number that is a multiple of 4 have a much higher probability (but I'm too lazy to do the calculation now).

There is something similar with the restaurant that have an index that is a multiple of 5 (and I'm still lazy). So the restaurant with the number 20 (or 0) has the highest probability of been selected.

As a though experiment, just imagine that you have 20 restaurants and 100 developers. It' almost sure that one of them will get a multiple of 4 and another a multiple of 5, and the multiplication will be a multiple of 20.

The problem is that in the multiplication modulo 20, the numbers 2 (and 4) and 5 are special. If you _add_ the four random numbers instead of _multiplying_ them, the problem is automatically solved.

</comment><comment><USER3> Assume an ordered list of the restaurants [0-19]. Let's use the hash of the first bitcoin block to be mined after (some time gmt) modulo 20 as index. Done.

</comment><comment><AUTHOR> My first own-content post on HN. Would love some feedback.

<comment><USER4> Email: How do you prove that the server set the message id and not the client?

Github: How do you prove that the first commit was done with the web UI? And how do you prove that there wasn't a force push replacing that commit?

</comment></comment><comment><USER5> Seems like you can just pre-announce any information source you do not control and then take hash mod 20 once the content is made available.

Ex.

\- Next article title posted on NYT

\- Donald Trumps next tweet

\- Sum of tomorrow's lottery numbers, mod 20

<comment><USER6> But that means waiting for the third party right?

<comment><USER7> You can use publicly available data feeds that changes every few minutes. For example, CNN's Afterhours trading data [0] seems to work pretty well. And it's just HTML, so you just hash it and you're good.

[0] [http://money.cnn.com/data/afterhours/](http://money.cnn.com/data/afterhours/)</comment></comment></comment>


Fuck You, Debian - chris-at https://medium.com/broken-window/fuck-you-debian-ebe8cede37ed#.l1cqi5o7q <comment><AUTHOR> Sounds more like fuck you Python developers, apparently zero of whom are willing to contribute to getting common Python packages into an apt repo.</comment>


U.S. Seeks to Heighten Scrutiny of Foreign Investment in Tech, Infra, Data - <AUTHOR> https://www.wsj.com/articles/u-s-seeks-to-heighten-scrutiny-of-foreign-investment-in-technology-infrastructure-data-11568750471?mod=rsswn <comment><USER2> Odd that this is being posted now. The article is a month and a half old and comments on the proposed regs were due nearly 2 weeks ago. I was actually thinking it's weird that I haven't seen much talk about this here - it's a huge issue, but has barely gotten mainstream discussion.

</comment><comment><USER3> I'd like to see this scrutiny extended to real estate investment as well - commercial and residential. If CCP has strategies for investing in Tech to make them behave in a way more favorable to their interests, it makes sense that they would have a real estate strategy to capitalize on that as well.

</comment><comment><USER4> U.S. ignores open barn door, proposes tighter regulation of cattle feed.

<comment><USER5> Which is the open door?

I can see a few reasons for taking this approach, the most mundane of which is the federal government actually has clear authority to regulate investment and existing regulatory frameworks to draw from.

Trying to regulate technology with ITAR or arms export laws is I think more likely to receive backlash to the point of facing constitutional challenge. The finance laws also probably risk this, but a lot less.

</comment></comment><comment><USER6> It's about time that the US start standing up to China's unrestricted warfare [1]. It's amazing that most Americans don't realize that China views the US as an adversary and has been quietly waging a war against the West. Why there are people who welcome the rise of Chinese/CCP hegemony when they are actively looking to crush [2] "Western values" is beyond me.

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

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

<comment><USER7> What I don't understand is how we got into this situation in the first place.

We know how powerful the US intelligence agencies are. The fact that the CIA has been able to install leaders in previously hostile governments shows their competence. Aside from Iran, most of their operations were successful. Even in their missteps, they were able to limit its influence in the region.

So how did it come to this? Why does it feel like the CIA dropped the ball on China?

<comment><USER8> > Why does it feel like the CIA dropped the ball on China?

Because the CIA, literally, dropped the ball on China. [https://www.nytimes.com/2017/05/20/world/asia/china-cia- spie...](https://www.nytimes.com/2017/05/20/world/asia/china-cia-spies- espionage.html)

<comment><USER9> How do you fall from being able to change the course of world history with shadow governments, to failing to even install operatives in the country?

> Last year, an F.B.I. employee pleaded guilty to acting as a Chinese agent > for years, passing sensitive technology information to Beijing in exchange > for cash, lavish hotel rooms during foreign travel and prostitutes.

That's how.

</comment></comment></comment></comment><comment><USER10> I wonder, given the current administration, if this is partly driven by the allegations against the Clinton Foundation concerning the Skolkovo Institute.

</comment><comment><USER11> Should also heighten scrutiny on export of advanced lithography, AI, material science, etc, to countries which are known for industrial espionage.

<comment><USER12> Seems like you'll want to petition the Dutch, Japanese, and Taiwanese governments to take some kind of action, then.

<comment><USER11> They should consider that too, yes. Taiwan especially. South Korea, too has advanced lithography capabilities, so add it to the list. China doesn't have domestic lithography beyond 28nm IIRC. Which, to be clear, is not a joke either, but it's 1/16th the density of the state of the art.

</comment></comment></comment><comment><USER13> This is a serious f'n problem, and I'm glad it's finally being recognized.

When I see PE groups in China outbidding their Western counterparts by absurd multiples, it just reeks of ulterior motives.

EDIT: Spelling police got me.

<comment><USER14> High bids are not strong evidence of ulterior motives. They reflect the fact that many US companies prefer not to take on foreign investors, so those investors have to bid much higher to get the deal.

<comment><USER15> > _They reflect the fact that many US companies prefer not to take on foreign > investors_

There is no evidence for this being the cause of the price premium. There is substantial evidence that capital flight predicts which countries overpay for foreign assets. Russia and China are better explained by the capital flight hypothesis.

<comment><USER16> Economically it'd be both. Capital flight increases the supply of loanable funds available for foreign investments. Unwillingness to take on foreign investors decreases the demand for this. High supply + low demand = a poor price.

<comment><USER15> > _Economically it 'd be both_

It _could_ be both. We only have evidence for the supply hypothesis ( _i.e._ capital flight). American companies requiring a higher price for foreign investors sounds plausible. But it's a guess for which we have zero evidence, particularly at a systemic level.

(Fixed demand and higher supply still lower prices.)

One test might be found in comparing pricing and flows for foreign investors around investment vectors companies have discretion around ( _e.g._ private investment or M&A) to vectors with which they don't ( _e.g._ public markets). You'd have to control with prices and flows from American investors in those markets, too, which makes it difficult.

</comment></comment></comment></comment></comment><comment><USER17> Many of my scientific works were plagiarized by Chinese researchers. However, I still don't buy the hate on China that is dominant in media and here on Hacker News. Basically,

i) the US wants to forbid other countries to have a chance to win in pure capitalistic games. Thus, it will block strong investors from certain countries but let itself to invest in the same countries.

ii) the US (e.g., agencies and private firms) currently controls the entire world via political and electronic backdoors installed everywhere. So it sounds like a bad joke when people claim that China is inventing some surveillance mechanisms like if it is a new one.

I believe that we first hand observe how propaganda (here, against China) works. While China does some shitty things, the most precise short description I can come up with is that "the West" wants China to be its slave. I have no doubt this will happen to some extent in the same way it happened to Japan in the 80ies (no slavery, but drastic decay). In 2040 we will be told to hate India. In 2060 it will be replaced by some growing African country.

<comment><USER18> > i) the US wants to forbid other countries to have a chance to win in pure > capitalistic games. Thus, it will block strong investors from certain > countries but let itself to invest in the same countries.

Don't you mean China instead of the US? They invest in America what they won't let America invest in China, especially in tech. China is hardly an open market itself.

<comment><USER17> China is the world's second largest country by foreign investment mainly performed via Hong Kong.

<comment><USER18> China is the largest country after all, but foreign investment is still heavily restricted, and investment tech companies even more so. The days of most investments into China going through HK are long gone.

</comment></comment></comment></comment><comment><USER19> Does anyone have a non-paywalled variant? I can't view it.

<comment><USER20> There's a video version in the article

</comment></comment><comment><USER21> This is like...two decades too late. China has their fingers in everything now.

<comment><USER22> Please don't post unsubstantive comments to HN and post don't post nationalistic flamebait to HN.

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

<comment><USER21> It's not unsubstantive or flamebait. It's fact. Chinese companies have been throwing a lot of money at Western companies for years, which gives the CCP a crazy amount of influence over wide swaths of the economy. But yeah, let's squabble over what's flamebait while the CCP slowly takes over the world.

<comment><USER22> If you continue to use HN for nationalistic flamewar we will ban you. That is because of the degrading impact it has on discussion here, and it goes regardless of what country you have a problem with.

HN users can, and do, make thoughtful points on such topics from many different viewpoints. "China has their fingers in everything" is not that.</comment></comment></comment></comment>


Ask HN: What programming language should I learn when relocating to SF? - <AUTHOR>

I currently live in Australia, but I'm looking to relocate to San Fran late this year.
I'm a bit of a generalist, but a developer at the core. I've been developing in PHP for years. I'm currently a Co-Founder / CTO at a 10 person company and have built several startups from the ground up, so have the whole breadth of Product Management, UX, design, marketing & ...janitorial experience that comes with that kind of role.
I'm a bit worried that most of my experience has been with PHP. I love the language, but feel like it might make it hard to me to get an exciting job in San Fran. I've still got a few months before I can move, so I'm looking for advice.
Does anyone have a suggestion or what language is best for me to spend my time learning to help when looking for a job at an early stage SF startup? Thanks! <comment><USER2> Probably ruby and/or python</comment>


Tell HN: Free Amazon Kaplan E-Books - <AUTHOR>

Today, Amazon is offering all the e-book versions of Kaplan test prep books for free. MCAT, LSAT, GRE, GMAT, Board Exams, Nursing, SAT, everything! Go to Amazon and search "Kaplan" in the Kindle store. You can use the E-book on a Mac or PC. <comment><USER2> I use this site dailycheapreads.com, most of the time it is only fiction, but sometimes you get really good financial/biz books for free (or almost free).

</comment><comment><USER3> I wonder what their business model is. Thoughts? I'm thinking that they want publicity to attempt to gain a majority of the test prep e-books.</comment>


Ask HN: Borrowing TOC from a similiar service? - <AUTHOR> Is this legal/wise as a temporary solution?<p>I've read through it and amended it as required. It's fairly generic in itself. <comment><USER2> Back when I was still practicing law, I was in-house with a large company. At the time, we were a small GC office - under 10 attorneys - for a really large organization. As a result, nearly all of us were generalists first with a little bit of specialization on the side. Given my background, that meant I did more or less anything tech-related. Anyhow, I now realize most of that buildup is unnecessary, but backspace takes time -

I was reviewing a couple of our web TOS when I realized I had no idea what I was doing. I figured hey, we're not first to market with this thing, lemme go look at what Competitor X wrote. So I do that, and it bears striking similarity to ours. Actually, it's identical except someone CTRL-H'ed the company name. So just for shits, I went and looked at the other two big companies in our market. Identical, other than the company names of course. All of us.

To this day, I have no idea who wrote it first. And I guess since I'm somewhere else doing fintech, I suppose I never will!

</comment><comment><USER3> If you have to ask "is this legal?" you should find someone who is able to answer questions like that, to wit, a lawyer.

</comment><comment><USER4> I just used [https://termsfeed.com/](https://termsfeed.com/) as suggested by someone. The cost was like $40 and I saved myself any potential headache.

You just check off the boxes of what you need and fill in a few fields and you get a nice somewhat customized TOC for your site.

</comment><comment><USER5> I've used Wordpress'/Automattic's that are CC licensed

Privacy Policy: [https://automattic.com/privacy/](https://automattic.com/privacy/) TOS: [https://en.wordpress.com/tos/](https://en.wordpress.com/tos/)

I had to modify them slightly for my use case but was pretty easy

</comment><comment><USER6> Yeah people do it all the time, and I do it all the time. Check out [https://github.com/Automattic/legalmattic](https://github.com/Automattic/legalmattic) if you're concerned about copyrights. But really most people don't really care until you become large enough. Just make sure you follow common sense</comment>


Ask HN: How company trust their employees to work remotely? - <AUTHOR> <comment><USER2> Same way employees trust the company to pay them: Assume it's happening until it doesn't.

</comment><comment><USER3> Sounds kinda paradoxical...how to trust???</comment>


I think the rise in "company formation/setup as a service" is interesting - <AUTHOR> Stripe Atlas
https://stripe.com/atlas
Gust Launch
https://launch.gust.com/start/
Clerky, sort of
https://www.clerky.com/pricing
eShares
https://esharesinc.com/product/features <comment><USER2> Hi, I'm one of the cofounders of Clerky... we started this whole rise :) Out of curiosity, what is the "sort of" part?

<comment><AUTHOR> :)

From the Clerky site it looked more like you pay for specific things and there wasn't some kind of overall monthly subscription dashboard (though I may well be wrong here), and for whatever reason my mind categorized those two things differently.

Though in saying that, Stripe Atlas is also just a one time fee.

So I think it's just a framing thing. The other ones called their things "products" and launched them as products, and maybe Clerky has done that too and I haven't seen it, but currently I associate Clerky more as a legal services thing.

Hopefully the insight into the (weird and non rationally justifiable) ways my brain is thinking about the distinction is useful

<comment><USER2> Thank you - the insight is very helpful! You are correct in that we are much more focused on the legal side of things, and have no plans to expand into accounting or anything like that. But I like to think we do the best job on the legal part :)

<comment><AUTHOR> :)

</comment></comment></comment></comment><comment><AUTHOR> Clickables:

Stripe Atlas [https://stripe.com/atlas](https://stripe.com/atlas)

Gust Launch

[https://launch.gust.com/start/](https://launch.gust.com/start/)

Clerky, sort of

[https://www.clerky.com/pricing](https://www.clerky.com/pricing)

eShares

[https://esharesinc.com/product/features](https://esharesinc.com/product/features)</comment>


America is a free country, the govt does what it wants but restricts the public. - <AUTHOR>

This is not democracy as the speech goes. <comment><USER2> America is not a direct democracy. The reputation of democracy has been in tatters for two millenniums. (Whether or not it deserves it is another thing entirely.)

<comment><AUTHOR> The reputation of democracy has been in tatters for two millenniums.? How?

<comment><USER2> People have been taking swings at democracy in the Athenian sense since, like ever.

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

<comment><AUTHOR> There was no democracy at the time of Socrates it was the Romans and/or the Church.

<comment><USER2> "In 399, the 'climate of opinion' was no doubt unfavorable to him. Most of the young aristocrats who had flocked round him were dead or discredited, and the leaders of the restored democracy were middle-class 'no-nonsense', rather anti-intellectual business men. They would approve when Meletos (probably a religious bigot, _not_ the same Meletos who arraigned Andokides) undertook a prosecution calculated to force Socrates out of Athens." _The Pelican History of Greece_ , Pg. 306

I admittedly flipped to the index and skimmed until I found that quote, but as I understand it Socrates was executed as a counterrevolutionary by the restored Athenian democracy. (Though the crime they actually charged him with was a little different, to say that the primary purpose of the trial was corrupting the youth of Greece would be like saying that the primary purpose of trying Al Capone was his tax evasion.)</comment></comment></comment></comment></comment>