Why Racket? Why Lisp? - <AUTHOR> http://practicaltypography.com/why-racket-why-lisp.html <comment><USER4> I dislike this notion that Lisp (or Haskell or OCaml or ...) owe it to everyone else to explain and enunciate why it can be more productive to use Lisp.

""" That's asking too much. If Lisp languages are so great, then it should be possible to summarize their benefits in concise, practical terms. If Lisp advocates refuse to do this, then we shouldn't be surprised when these languages remain stuck near the bottom of the charts. """

What?? Why? The problem is not and has never been communication of Lisp features. No one made a concise list of why C and Java are so great that people rushed to use them. Instead, they were pervasively used and taught in universities, and they are pervasively used in the development of most applications for e.g. Windows and Linux, and they are relatively simple languages (in theory) whose semantics most people "get". No wacko high order crap, no weight curried things, no arrows or morphisms or monads or macros.

Programmers of such languages don't owe the rest of the world anything. Everyone has a choice about what to use, and it's each individual programmer's responsibility to choose them wisely. There is plenty of material about Lisp and Scheme out there. Unfortunately, we are in this TL;DR culture where no one has the time to spend a few hours every week to learn something new, since somehow that's too big a risk on their precious time.

Now, for some comments:

1\. Everything is an expression.

He says this is a boon, but it's also confusing for "expressions" which are side effectful. Too bad he did not talk about that, nor did he talk about how the expression-oriented way of thinking is really best for purely functional languages that allow for substitution semantics.

2\. Every expression is either a single value or a list.

This is wrong, unless we devolve "single value" into the 1950's idea of an "atom". What about vectors or other literal composite representations of things? What about read-time things that aren't really lists or values?

3\. Functional programming.

Functional programming is indeed great, but why don't we talk about how in Lisps, we don't get efficient functional programming? Lisp has tended to prefer non-functional ways of doing things because Lisp will allocate so much memory during functional programming tasks that for many objectives, FP is far to inefficient. Haskell solves this to some extent with things like efficient persistent structures and compilation algorithms such as loop fusion. Lisp doesn't really have any of this, and the data structures that do exist, many people don't know about or use.

4 and 5 don't really have to do with Lisp but particular implementations. That's fine I guess.

6\. X-pressions.

What the hell is an X-pression?

7\. Racket documentation tools.

Okay.

8\. Syntax transformations.

He made the same mistake as he so baroquely outlined at the start. What in the world are these "macros" and "syntax transformations" good for? You're just telling me they're more powerful C preprocessor macros that can call arbitrary functions. But I was taught that fancy CPP code is a Bad Idea, so boosting them is a Worse Idea.

9\. New languages.

Same problem as 8. You say it's useful but you don't say why. Just that it's "easier".

10\. Opportunities to participate.

Nothing to do with Lisp again.

* * *

Instead of all this glorifying of Lisp and etc, why don't we spend time increasing that library count from 2727 to 2728? Or do we need to go through an entire exercise about whether that time spent is worth it or not?

""" Rather, you are—because a Lisp language offers you the chance to discover your potential as a programmer and a thinker, and thereby raise your expectations for what you can accomplish. """

You're repeating everyone else. Notice how difficult it is to convey such things without being hugely abstract and unhelpful? Why don't other programmers see this huge productivity benefit from these Lisp wizards in their day-to-day life? Where are the huge, useful applications? They all seem to be written in C or C++.

""" It's mind-bendingly great, and accessible to anyone with a mild curiosity about software. """

It is accessible to those who are intently curious about theoretical aspects of software development, especially abstraction, and who can take exercises which require mathematical reasoning. A "mild curiosity" in my experience with others will _not_ suffice.

* * *

This post may sound somewhat cynical and negative, but Lisp enlightenment articles are almost as bad as Haskell monad tutorials. They're everywhere and by the end, still no one gets it. And I don't like the attitude that because a group G doesn't understand it, and group H does, that H owes it to G to spoonfeed the information. That's not the case.

<comment><USER5> It benefits both groups to to enlighten G. Since G is so much larger, that's how we would increase the library count from 2727 to 27280.

<comment><USER4> The best way to demonstrate it is to write interesting software, not to flounder on some abstract explanation about the greatness of G's favorite language.

<comment><USER6> The original author of the blog post _did_ write some interesting software in Lisp, used it to write a book, and then he wrote his blog post.

To me this is a good example of something languages have to have to make progress: users and evangelists/educators, with a large overlap between the two.

</comment></comment></comment></comment><comment><USER7> From what I've seen out of the Clojure community over the past few years, it seems like they're far more likely (and able) to offer up concrete examples of how Clojure makes their businesses and products successful in a way that an imperative language could not. So, yay Clojure community, and boo on hand-wavy Lisp people.

e.g.:

[http://www.kreuzwerker.de/en/blog/posts/why-clojure- rocks-2/](http://www.kreuzwerker.de/en/blog/posts/why-clojure-rocks-2/)

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

<comment><USER8> > ... in a way that an imperative language could not

Perhaps a nitpick, but sometimes nomenclature is important. Clojure (like all Lisps) _is_ an imperative programming language. "Imperative" languages are contrasted with "declarative" languages[1]. Where does _functional_ fit in and what is the name for "non-functional"? Well, that's not clear, as "functional" (in the PL sense) doesn't even have an agreed upon definition. Is Clojure "functional", then? Well, it's certainly not pure like Haskell is (and it has explicit loops etc.), but it does encourage more uses of function composition than, say, Java, it's _more_ declarative, and it also isn't object-oriented, but that doesn't make it not imperative. Actually, I think even Haskell still qualifies as imperative.

But Clojure can certainly be contrasted with OO and procedural languages (even though at least one of its core abstractions -- protocols -- is borrowed from OO).

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

<comment><USER9> >Clojure (like all Lisps) is an imperative programming language. "Imperative" languages are contrasted with "declarative" languages.

Wikipedia, and probably everybody, defines truly functional programming languages (which includes Clojure and the other Lisps) to be declarative, not imperative. [1]

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

<comment><USER10> > truly functional programming languages (which includes Clojure and the other > Lisps)

This is wrong. I don't know how to say this... Lisps do usually support functional programming paradigms, but most Lisps are indeed anything but functional (in the ML sense).

<comment><USER11> Lisp was considered a functional programming language before ML existed. Lisps generally don't have as strong and exclusive support for the functional paradigm as some newer languages (and pretty much anything else still in use is newer than lisp), but then C++ is known as an OOPL despite having less strong and exclusive support for the OO paradigm than many _older_ languages, so there's that.

<comment><USER12> _Lisp was considered a functional programming language before ML existed._

That was then and this is now. Today, functional programming means side- effect-free with a strong type system, and efficient use of higher-order abstractions over functions, including things like typeclasses to define entire morphisms given a few functions which establish relationships between objects. Lisp doesn't really support this effectively. Arguably, with concepts C++14 is more functional than Lisp.

<comment><USER11> > Today, functional programming means side-effect-free with a strong type > system

Functional programming has always meant the _style_ or _paradigm_ of programming that prefers side-effect-free declarative code that can be modelled in the substitution model; type systems have always been (and remain) orthogonal concerns. A functional language is one that supports the functional paradigm, but it has never been most commonly used for languages that _exclusively_ support that paradigm. Pure functional code is the term that has been used for code that is exclusively in that style, and pure functional language is the term that is generally used for a language that has exclusive support for that style.

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> I sure hope the giant, hideous, obtrusive diamonds inserted into the text to denote a hyperlink doesn't catch on as a trend. It's a great way to break the flow of the text and irritate your readers.

As for the idea of Lisps, well, it sure seems neat. But I've literally never run across a situation where I needed my code to edit itself. I've never run across a situation where the lack of an everything-is-an-expression-is-a-list feature prevented me from doing what I wanted to do.

So I just don't really feel the need to get repetitive strain injuries in my pinky from reaching for the parentheses all the time.

<comment><USER14> As someone who writes Lisp (well, Clojure) every day and does not particularly enjoy it, I find the common complaint about parentheses to be a non-issue.

In fact, I'm not sure I've heard of anyone who wrote any significant amount of lisp code and came away talking about parentheses. This seems to be mostly a reaction from people who've read a bit of Lisp without using it.

Then again, I just noticed that I type ( and ) with my third and fourth fingers, so maybe it would be worse if I typed properly :)

<comment><USER15> I would assume it'd be the same as people complaining about significant whitespace in python. No one who actually programs in python complains about the whitespace.

<comment><USER16> I find it a pain and error prone when having to change indentation in python code. E.g. when adding an 'if' in front of a block of code. So easy to miss a line or mess up the indentation in the block itself and then you might not spot an error until run time.

<comment><USER17> I was under the impression that Python emits an error about inconsistent indentation at compile time (the initial parsing and interpretation of a script file), not runtime (+x time units later, after the program has started). Is that incorrect?

<comment><USER16> I'm talking about something like this..

        def foo():
            do_this()
            and_this()

later I change it..

        def foo():
            if something():
                do_this()
            and_this()

oops... and_this() should have been in the if block and I won't find out till I run it.

(imagine a much bigger more complex example of the above function)

In large pieces of code this can be easy do. If you are forced to use parenthesis it's much more difficult to make this error. One could argue that experience prevents you from doing this but I have sadly found this not to be the case in practice.

<comment><USER18> > If you are forced to use parenthesis it's much more difficult to make this > error.

By "parentheses" you mean delimiters, which create visible boundaries to defined areas in code. Parentheses are an example of delimiters, but not all delimiters are parentheses.

Bash has if ... then ... else ... fi

Ruby has if ... else ... end

C/C++/Java have (logical test) { controlled area }, nested to any practical depth.

And so forth. Python doesn't.

> One could argue that experience prevents you from doing this but I have > sadly found this not to be the case in practice.

This is an argument against complex functions that do a lot, as opposed to breaking program logic up into smaller blocks that are easier to understand and control. The old argument against this practice was that a large function that did everything was faster than the same logic broken into smaller blocks. A modern compiler will generally prevent this from happening.

<comment><USER16> Well I used the word parenthesis since the topic was Lisp.

> This is an argument against complex functions that do a lot

Functions large and complex enough to make this problem significant seem to be the reality I have to deal with when programming in the large. It's only my opinion but a language feature that improves my real world experience at no cost is a bonus.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> If you took a Common Lisp programmer from the early to mid 90s in a time machine to today, very little about current programming languages would seem novel or an advance over what he or she was using then.

I think this is a reason for much of the smugness of Lisp programmers. Whatever features you think are new or cool or advanced about your programming language, Lisp probably got there first.

<comment><USER20> Nonsense. We've figured out how to do type systems. We can even fully infer types if you're willing to accept some quite reasonable restrictions on how polymorphic your code is. We have a bunch of reasonable approaches to effect tracking, which Lisp folk used to have to do by hand (that story about the T garbage collector sounds like the most unmaintainable piece of code I've ever heard of). We know how to solve the expression problem.

Modern "pragmatic"-oriented languages have little that wasn't in Lisp - or in Algol. Which is fine! The innovation is about the wider ecosystem (a lisp programmer from the '90s would be amazed by CPAN, never mind maven), or about making common tasks easy (a lisp programmer might eventually put together a collection of idiosyncratic macros with much of the functionality of Rails, but that wouldn't be a project you could hire someone else to maintain). OTOH modern "researchey" languages, like Coq or even Haskell, are far far ahead of Lisp.

<comment><USER21> > OTOH modern "researchey" languages, like Coq or even Haskell, are far far > ahead of Lisp.

I know Common Lisp well, and I honestly tried to learn and to use Haskell. I realized that Haskell has the advantage of a strong type system but it seems only to be useful for language research (compiler writing) and mathematical applications. Haskell is (in my case) almost useless for every day real world applications. It is a very good choice if I know the algorithm and data structures exactly in advance. But real world applications often require changes which are not predictable. It is a pain to align a whole Haskell project according to new requirements to make the whole system work again. It takes far too much time, and I wonder where the benefits are if other weaker typed languages can do the same job as well, or even better.

In the Lisp world I can develop prototypes very quickly. And if I need a strong type system as in Haskell then I can use Shen (shenlanguage.org) which has a strong rule based type system on top of Lisp. That means that I can use both worlds -- the default dynamic system of Lisp, and the strong type system of Shen.

Lisp is still very powerful and yet small in comparison to the huge LLVM system of Haskell. It can be used on embedded systems (ECL for instance) which Haskell is not able to do (AFAIK).

I don't know what you exactly mean with "tracking". If that means tracing then Lisp even offers backtracking (debugging back in time), and I think almost every Lisp programmer knows Slime.

So the claim that Haskell is "far far ahead" of Lisp is not true at all. The only real weak point of Lisp is a good GUI library. I wish there were strong support of Qt and HTML5.

Another favorite language of me is Nimrod because it joins the best of several languages (Python, Perl, Lisp and C) together.

<comment><USER22> > It is a pain to align a whole Haskell project according to new requirements > to make the whole system work again.

I'll quote a recent tweet by Chris Done: "I feel like 80% of Haskell advocacy should involve screencasts of people refactoring large codebases."

In my experience, refactoring is easier with a strongly typed compiler, not harder. It may take more time and work to get your program to "run" again, but the end result will be more likely correct, and more likely to be a better design.

<comment><USER23> There are other ways of making refactoring easy. I'm not trying to dismiss a powerful type system - which is a great help indeed - but pervasive unit tests and contracts work as well. Linters are a nice addition, and even gradual typing like in Erlang with Dialyzer is much better than nothing. The point being: problems solved by type systems are being solved with other tools, too. I don't want to argue about _how well_ these tools work, because all of them (including static type systems) have relative strengths and weaknesses; it's just unfair to present refactorings or correctness guarantees as benefits reserved for type systems alone.

<comment><USER24> I'd argue that you can rely more on powerful types because they lend more to the totality of your program. This is just a hunch/intuition though. If I'm wrong, I'd be glad to know why and how so I can correct that ;)

</comment></comment></comment></comment></comment></comment><comment><USER10> Can not resist...

This article is fairly misguided. I find it painful that everybody who writes about a Lisp offshoot (Scheme, Clojure, ...) ends up misrepresenting Common Lisp.

To sum up "Why Lisp?" from a CL perspective: CL has pretty much every feature of every programming language around, only that its better designed, implemented and generally more powerful. It's just a poweruser language. Its not just macros, sexps and lambdas. Its also number types, arrays, OOP, symbols, strings, structs, dynamic/lexical variables, lambda lists, multiple return values, on-line disassemble, exceptions, restarts, MOP, metacircular definition, great implementations, great libraries...... the list goes on and on... I surely forgot a ton of great stuff. TL;DR: CL got everything. And this "everything" is designed so well that its extensible and no CL programmer ever needs to doubt that any new feature can be implemented easily in CL.

To correct a few of the wrong statements of OP:

> "Wait—I love state and data mutation. Why would you take them away?" > Because they're false friends.

CL is NOT particularily functional. Just because we know how to write good side-effect free code, doesn't mean its a functional language. (We jave SETF after all, failed to mention that aove).

> a syntax transformation in Racket can be far more sophisticated than > the usual Common Lisp macro.

Outright wrong. The only reason Scheme has weird macro systems is because its a Lisp 1. CL is designed well (thus being a Lisp 2), and thats why its simple but ultimately more powerful macro system can work.

> A macro in Common Lisp is a function that runs at compile-time, > accepting symbols as input and injecting them into a template to > produce new code.

This is so wrong I had to write this comment. A macro in Common Lisp is a COMPILER, it accepts arguments and returns an SEXP. It is infinitely powerful, it can do EVERYTHING.

<comment><USER25> I would take issue with the OOP in CL being better implemented than other languages. Don't get me wrong, the Metaobject Protocol is a feat of modern engineering, but the actual result is an OOP that feels tacked on after the fact. CLOS is very powerful, but when it comes to OOP, other languages are syntactically cleaner in their implementations.

Also, it's a bigger debate, but the lack of hygenic macros in CL is often seen as a negative. Again, this is a larger debate, but certainly a case can be made that CL doesn't have everything designed so well.

I love CL, but it's helpful to remember its limitations.

<comment><USER10> > syntactically cleaner in their implementations.

Listen to yourself please.

> lack of hygenic macros in CL

Which lack? CL macros are usually very hygienic, being a Lisp-2 and all, having GENSYM.

> I love CL, but it's helpful to remember its limitations.

What limitations? Not having syntactical things you seem to like and supporting non-hygienic macros are not limitations. Quite on the opposite, I believe these are features.

</comment></comment></comment><comment><USER26> The top reason here could been written - lisp is more expressive. You can find ways to express an idea that make sense now, and which are readable. Macros is a different part of the same idea.

\--

Maybe I'm doing it wrong, but a problem I've had with racket is as you begin to build larger projects, when something breaks it can be quite difficult to find out exactly where the break happened. When you compile Java or run Python, it's almost always immediately obvious what broke.

The way I got around this was to use a methodical TDD approach. Would be a shame if that turns out to be as good as it gets for lisp.

Something I haven't done yet but am interested to get to is attaching a repl console to a running process.

<comment><USER27> Yes, that is very important. When I watch experienced programmers learn Lisp, they write a couple functions, then go through the pain of debugging that.

They should unlearn that. And put tiny fragments in the REPL. (Or whatever interactive tool you have.) Playing with it.

<comment><USER26> Since lisp is homoiconic (refreshed on this, see downvotes below) it would be nice if you could type things into a repl and then run a function like this: (persist function-i-just-wrote). And then it would save to a text file. Then you wouldn't need to stuff around with the mouse copying from one buffer to another and the like.

(I expect something similar is possible in emacs, but emacs is not my thing.)

Hmm. I suppose I could just write the persist function myself. Watch this space.

<comment><USER28> What you just described is pretty much universally handled by editor integration.... I can't imagine anyone actually develops lisp without this.

The editor is hooked directly up to a running image.. a keypress (or two) causes an expression to be executed in the running image... you can flip to the REPL and goof around directly and/or at the same time work from one or more editor buffers and selectively execute code as you desire. You can bust into the debugger whenever you feel like it, etc etc.

Someone else described it better above I think - but this image-based interaction is one of the most attractive things for many - it goes well beyond just having a REPL where you can evaluate code... lisp was basically designed around the idea of interactive development.

If you think this through to a large, complex project - you can have a giant running application, working in production, and still attach to it with an editor/environment and debug it live... that's hard to do with anything else.

</comment></comment></comment></comment><comment><USER29> The manual to this publishing system, discussing how its markup/programming language is implemented as a custom Racket language, is pretty interesting: [http://mbutterick.github.io/pollen/doc/](http://mbutterick.github.io/pollen/doc/)

</comment><comment><USER30> It seems most people here have never used (and not tried) racket.

I decided to use racket for my little sides projects, as replacement for scala and clojure.

I choose it because it was clear for me i can't stand limitations other language impose to me in way of style and boilerplate, the racket macro (aka syntax transformer) system is the most advanced i know to reduce the boilerplate to a minimum and so just write what i want to express. In facts i rarely write macro because writing a good macro demand you take care of errors syntax, i am lazy in the bad meaning of the term.

I choose it because it's dynamic typed and i get more convinced that type go on your way most of the time (expect complex algorithms)(i write little projects, so refactoring argument is out). It enable me to write code and eval it on the fly with geiser (using enter! on the back), after eval the new function i test it in the repl, hack until the function meet the requirement copy paste from repl and boom i get a unit test. Because it as eval and it will become handy one time in your programmer life for sure.

I choose it because of it's sexpr syntax, as a heavy user of emacs i know that other syntax is a pity.

Also because it has (and i use):

1\. llar parser (implemented through a macro).

2\. A pattern matching nothing to envy scala or clojure deconstructs.

3\. An optional type system.

4\. A contract system.

What i find hard as a new comer (to racket, not as a programmer already now scala, clojure, half of c++ :), php) is

1\. The broadness of the features the language offer, which feature to use e.g.: class or generics.

2\. The documentation is rich but lack of examples for the common cases, so you need to read the doc of the function (sometime it's huge).

3\. Understanding how racket module works is quite hard and you have the documentation, if you don't plan to play with the macro expander (the stuff that run your macro) and some dynamic features you don't really need to.

4\. You need to 'register' the errortrace library if you want a stacktrace, quite a surprising behaviours for me.

My opinionated conclusion:

Racket is the best language design i ever see, it's hard to learn but make you feel learning an other language will just become to learn a new sub-optimal syntax. Sadly the ecosystem is lacking libraries and peoples and i am not helping in this way.

<comment><USER31> Ah, someone with Clojure experience. I wanted Clojure to be my next language to learn, so now I'm curious why you ditched it in favor of Racket?

Especially:

\- Whats the concurrency story for Racket?

\- If I wanted to code my REST endpoints in Racket, are there competitive libraries available?

<comment><USER32> Regarding the Racket concurrency story, it has places; [http://docs.racket- lang.org/reference/places.html](http://docs.racket- lang.org/reference/places.html).

"A place is a parallel task that is effectively a separate instance of the Racket virtual machine. Places communicate through place channels, which are endpoints for a two-way buffered communication."

So places are somewhat like Erlang processes.

Distributed Places are also interesting: [http://docs.racket- lang.org/distributed-places/index.html](http://docs.racket- lang.org/distributed-places/index.html)

<comment><USER33> Places are about parallelism. For concurrency specifically, the most interesting features are threads, channels, and futures and can all be found here: [http://docs.racket- lang.org/reference/concurrency.html](http://docs.racket- lang.org/reference/concurrency.html)

Distributed places is pretty cool, however!

<comment><USER31> Thanks. So basically we get most of what Java has to offer plus thread mailboxes, which is nice. Not sure what to make of Places though - <USER2> exists and has Racket bindings, is there something Places is better at?

</comment></comment></comment></comment></comment><comment> wes-exp Author is wrong about hygienic macros – they are not more powerful. They are less powerful, and more complicated, in order to enforce safety. Whether this is preferable or not is a matter of debate.

<comment><USER34> No, the article is correct. Hygienic macros give you strictly more information to work with, enabling them to be more expressive. It's possible to implement unhygienic macros, either at an individual macro level or a whole new macro syso, using Racket's macro system.

<comment> wes-exp I'm thinking you're right in the theoretical sense, but I'm right in the practical sense. Every time I've looked at hygienic macro systems, it just seems like now I'm jumping through extra hoops to overcome a more restrictive way of doing things. Is that extra information you cite typically useful for anything besides safety? Can you give an example?

<comment><USER34> Yes, the information is useful for lots of things. For example, tracking the binding information in the data is how DrRacket manages renaming, how Scribble (the Racket docs tool) hyperlinks every identifier in every example to the correct documentation for the identifier, how Typed Racket tracks type metadata for identifiers, ...

</comment></comment></comment></comment><comment><USER35> Some practical features I enjoy in CL:

1\. _Conditions and restarts_ : As far as error handling in programs go this is the most rock-solid system I've encountered. You can tell the system which bits of code, called restarts, are able to handle a given error condition in your code. The nice thing about that is you can choose the appropriate restart based on what you know at a higher-level in the program _and continue_ that computation without losing state and restarting from the beginning. This plays well with well structured programs because the rest of your system can continue running. Watching for conditions and signalling errors to invoke restarts... it's really much better than just returning an integer.

As a CL programmer using SLIME or any suitable IDE, this error system can throw up a list of _appropriate_ restarts to handle an error it encounters. I can just choose one... or I can zoom through the backtrace, inspect objects, change values in instance slots, recompile code to fix the bug, and choose the "continue" restart... voila the computation continues, my system never stopped doing all of the other tasks it was in the middle of doing, and my original error was fixed and I didn't lose anything. That is really one of my favorite features.

2\. CLOS -- it's CL's OO system. Completely optional. But it's very, very powerful. The notion of "class" is very different than the C++ sense of struct-with-vtable-to-function-pointers-with-implicit-reference-to-this. Specifically I enjoy parametric dispatch to generic functions. C++ has this but only to the implicit first argument, _this_. Whereas CLOS allows me to dispatch based on the types of all of the arguments. As a benign example:

        (defclass animal () ())
        (defclass dog (animal) ())

        (defgeneric make-sound (animal))
        (defmethod make-sound ((animal animal))
          (format t "..."))
        (defmethod make-sound ((dog dog))
          (format t "Bark!"))

        (make-sound (make-instance 'animal))
        (make-sound (make-instance 'dog))

Will print "..." and "Bark!" But the trivial example doesn't show that I can dispatch based on all of the arguments to a method:

        (defclass entity () ()) ;; some high-level data about entities in a video game
        (defclass ship (entity) ()) ;; some ship-specific stuff... you get the idea.
        (defclass bullet (entity) ())

        ;; ... more code

        (defmethod collide ((player ship) (bullet bullet))) ;; some collision-handling code for those types of entities...
        (defmethod collide ((player ship) (enemy ship))) ;;; and so on...

Conversely...

        Ship::collide(const Bullet& bullet) {}
        Ship::collide(const Ship& ship) {}

Where collide is a virtual function of the Entity class requiring all sub- classes to implement it. In the CLOS system a method is free from the association to a class and is only implemented for anyone who cares about colliding with other things.

The super-powerful thing about this though is that... I can redefine the class while the program is running. I can compile a new definition and _all_ of the live instances in my running program will be updated. I don't have to stop my game. If I encounter an error in my collision code I can inspect the objects in the stack trace, recompile the new method, and continue without stopping.

3\. Macros are awesome. They're like little mini-compilers and their usefulness is difficult to appreciate but beautiful to behold. For a good example look at [0] where baggers has implemented a Lisp-like language that actually compiles to an OpenGL shader program. Or read Let Over Lambda.

One of the most common complaint I hear about macros (and programmable programming languages in general) is that it opens the gate for every developer to build their own personal fiefdom and isolate themselves from other developers: ie -- create their own language that nobody else understands.

Examples like baggers' shader language demonstrate that it's not about creating a cambrian explosion of incompatible DSLs... it's about taming complexity; taking complex ideas and turning them into smaller, embedded programs. A CL programmer isn't satisfied writing their game in one language and then writing their shaders in another language. And then having to learn a third language for hooking them all up and running them. They embody those things using CL itself and leverage the powerful compiler under the floorboards that's right at their finger tips.

Need to read an alternate syntax from a language that died out decades ago but left no open source compilers about? Write a reader-macro that transforms it into lisp. Write a runtime in lisp to execute it. I've done it for little toy assemblers. It's lots of fun.

... this has turned into a long post. Sorry. I just miss some of the awesome features CL has when I work in other languages which is most of the time.

[0] [https://www.youtube.com/watch?v=2Z4GfOUWEuA&list=PL2VAYZE_4w...](https://www.youtube.com/watch?v=2Z4GfOUWEuA&list=PL2VAYZE_4wRKKr5pJzfYD1w4tKCXARs5y)

<comment><USER36> _" CLOS allows me to dispatch based on the types of all of the arguments."_

But can it dispatch based on the return value?

<comment><USER37> This is an example of dispatching on return type in Clojure - which is similar to Common Lisp.

[http://stackoverflow.com/questions/22740178/clojure- dispatch...](http://stackoverflow.com/questions/22740178/clojure-dispatch-on- return-type-as-expressive-as-haskell-typeclasses)

(The Haskell purists point out that the dispatch isn't determined at compile time - form your own opinion about whether they have a point).

<comment><USER38> I'm not a Haskell purist, but this isn't really dispatch on return type, this is manual inspection of manually provided metadata that just happens, in this case, to be (intended to be) a return type.

The return type isn't enforced, incidentally:

        user> (defn ^String my-function [^Integer foo] (apply concat (repeat foo "x")))
        #'user/my-function
        user> (my-function 3)
        (\x \x \x)

Whoops, I meant (apply str ...).

You also can't use the metadata on a function introduced by (defn ^ReturnType ...) in more or less any useful way, if you don't have a reference to the var itself. If you pass it to a function, you basically can't recover it:

        user> (defn do-something-interesting-with-return-type [f] (println "here's my metadata:" (meta f)))
        #'user/do-something-interesting-with-return-type
        user> (do-something-interesting-with-return-type my-function)
        here's my metadata: nil
        nil

Gone!

You can tell that something fishy is going on in the SO answer because the author has to pass in the function by name, #'return-string.

</comment></comment></comment></comment><comment><USER39> A good list of some interesting 'day to day' benefits of Lisp. Maybe that is something that would appeal to beginners especially.

From my perspective Lisp is a powerful language because of its genesis in research. The question wasn't "How do we make a tool to make this hardware do what want?" but rather for a research goal.

If you want to read the actual original Lisp paper look up: Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I John McCarthy April 1960

Paul Graham covers it nicely in this essay, especially the "What made Lisp different" list about 1/3 in [http://www.paulgraham.com/icad.html](http://www.paulgraham.com/icad.html)

Lisp has had expressiveness we're only recently seeing in popular mainstream languages now. It has to do with the design, the simplicity, and how Lisp expresses problems. I've often heard it described as "the language gets out of your way." That's why Lisp.

<comment><USER40> Thanks for the link (it's one of PG's I hadn't read yet.) That being said, I really didn't like the part where he implied that if 1 line of Lisp can replace 20 lines of C that it also means that a feature can be developed 20 times faster in Lisp than C. Are you a Lisp programmer? I've only used it a bit, but I didn't get the impression things would scale that way for feature development.

<comment><USER39> Interesting point. Particularly I believe that the 'coding' part isn't the real job, I'm not just an overpaid typist. So why is concise expression good?

For the record, I am NOT a day-to-day Lisp programmer, but I've played with it a little and read about it some.

I think it's because its about expressing your problem clearly. It's not "20 times less lines" so much as it is "20 times clearer expression". Not that it's exactly 20x, but it seems better. When you express things more clearly, and structure your code more like your problem, and less like your programming language, you shed a lot of accidental complexity ( See Out of the Tarpit - [http://shaffner.us/cs/papers/tarpit.pdf](http://shaffner.us/cs/papers/tarpit.pdf) ), so managing the complexity of your project is easier, which means fixing bugs and adding new features is also easier. I think this is the route being implied when they say you can develop features faster. I'm not so certain you'd see the benefit in a particular feature, but over time.

Note that a lot of the modern languages are picking up many of these expressive features, closing the gap there as well, which is wonderful.

</comment></comment></comment><comment><USER41> Why Lisp? That is understood.

Why Racket? From an ignorant outsider's perspective, all Lisps seem to be more or less interchangeable when it comes to the language. They only differ in the details, and each seems to be about as difficult to learn as the other. Although this article does make somewhat of a case for specifically Racket, it seems to be a rather weak one - tools are nice and some language details are nice. But the same general arguments can be made for other Lisps, most notably Clojure. It seems to me that Clojure is a lot more practical: it has many good libraries in both Clojure and Java, it has some great tools, there's a lot of momentum, and it can be deployed everywhere (including the browser).

So, being an ignorant outsider, is there any reason the Lisp I should learn _isn 't_ Clojure?

<comment><USER23> > all Lisps seem to be more or less interchangeable when it comes to the > language

Definitely not true.

It may be true to an extent for implementations of one particular lisp, like Common Lisp or Scheme, but even then there are very real, and significant differences. Simple and regular syntax makes it actually much easier to build many different semantics, and that's what lisps are about.

Racket has less libraries than Clojure and no access to JVM ecosystem. On the other hand it's FFI capabilities to C are very nice and easy to use. Racket macro system - syntax-parse (with syntax-rules and syntax-case and... defmacro for simpler cases) - is the most powerful there is right now. Combined with access to the reader and ability to make reader macros this makes Racket much easier to extend and transform than Clojure (by design). Which takes us to the biggest advantage of Racket, which is it's actually a family of languages, both s-exp based and with traditional syntax, built for specific purposes, which you can mix and match easily. Typed Racket and lazy variant, and FrTime, and Datalog - and more - are examples of this. Then you have module system which is a game changer for unit-testing, object system which is more powerful than most (besides CLOS, but there's always Swindle), the most advanced contracts system among all PLs, and of course quite fast JIT compiler and many more.

Clojure is simpler than Racket, but provides a set of highly opinionated defaults which people are comfortable with. I think Clojure and Racket are like Sublime Text and Emacs - Emacs _is_ strictly more powerful, but it requires much more work to use this power well, while Sublime works well from the get go. But in the end both are infinitely better than Notepad and sooner or later you will come to know both, which is what I suggest you should do.

<comment><USER41> Thanks for the clarification. Is it worth considering others besides Racket and Clojure as a first Lisp? Are there Lisp equivalents of Vim and Atom as well?

<comment><USER42> Yes, Common Lisp. Gradually-typed, fast, compiled, standarized, stable, and with multiple mature implementations.

</comment></comment></comment></comment><comment><USER43> RacketCon is being held in Saint Louis, Missouri, USA the day following the Strange Loop 2014 conference (also in Saint Louis):

[http://con.racket-lang.org/](http://con.racket-lang.org/)

I hope to see some of you there!

</comment><comment><USER44> Check it out. For five years I have been developing a tool called TXR. It's a "Unixy" data munging language that is ideally suited for programmers who know something about Lisp and would like to move away from reaching for the traditional stand-bys like awk, sed, perl, ...

You do not have to know any Lisp to do basic things in TXR, like extracting data (in fairly complicated ways) and reformatting it, but the power is there to tap into.

In TXR's embedded Lisp dialect, ("TXR Lisp"), you can express yourself in ways that can resemble Common Lisp, Racket or Clojure.

You can see a glimpse of this in this Rosetta Code task, which is solved in three ways that are almost expression-for-expression translations of the CL, Racket and Clojure solutions:

[http://rosettacode.org/wiki/Self- referential_sequence#TXR](http://rosettacode.org/wiki/Self- referential_sequence#TXR)

Or here, with syntax coloring:

[http://www.nongnu.org/txr/rosetta-solutions- main.html#Self-r...](http://www.nongnu.org/txr/rosetta-solutions- main.html#Self-referential%20sequence)

If you closely compare the original solutions, you will see that certain things are done more glibly in TXR Lisp.

</comment><comment><USER45> > If Lisp languages are so great, then it should be possible to summarize > their benefits in concise, practical terms.

His list is concise but man did he take a while to get to it!

Seriously though. The introduction was super relevant as I have wondered the exact same question about Lisp myself. What features make it so praise-worthy? Maybe X-expressions isn't a core feature for everyone to appreciate, but the fact that everything is an S-expression is an understated value. People complain about its syntax, but alternate versions (so many reincarnations of parentheses-less Lisps) have never caught on.

The thing is, Lisp is no longer unique in its feature set, and languages with more standard forms of syntax have incorporated some of its features. But it is uncommon to find all of these listed features in one language. In the domain of data analysis where I do most of my work, it still makes me sad that XLISP-STAT has been supplanted by other languages which leave the user wanting.

<comment><USER46> By feature set you mean sequences, map/filter/reduce and such ?

I felt there was more to Lisp than that. It was the root of the ML/function- based family, which deepened the recursive typed logic McCarthy talked about in his early papers.

The first-class function and functions as modeling unit, giving composability, and domain embedding as first class.

</comment></comment><comment><USER47> Agree with some of the earlier comments: the diamond-shaped thingies inserted are really a nuisance and breaks the reading flow.

<comment><USER48> Maybe only because it's unfamiliar. After all, other punctuation doesn't break your flow. And trying to figure out whether something is a link or not also breaks flow.

<comment><USER47> The real question is why someone would change something most people already getting used to. I don't see any compelling reason to change the link in this way, do you?

</comment></comment></comment><comment><USER49> Does anyone else find it difficult to highlight things on this page? Specifically, 'kvetchery' which is found in the third paragraph.

I believe the author is the one responsible for the facelift of Racket's documentation. He may belittle his own lack of formal programming education but I am thankful for his design chops.

</comment><comment><USER50> I am learning Perl's FP features and really liking it, and teaching myself common lisp. I enjoyed the article quite a lot actually.

I find it is very hard to define functional programming for many people but this is what I have come to explain to people:

 _Functional programming means thinking in terms of mathematical functions in the f(x) sense. Once you get that basic promise, that for any given input you have a single correct output, then it transforms the whole way you think about and designing your software._

The better I get with lisp, the more everything else changes. I may have to try Racket.

<comment><USER51> What about spending a few minutes exploring P6 and providing feedback about it to Larry Wall et al on #perl6?

One easy way follows (for you or anyone else reading this who is curious about P6). Preferably between about noon and midnight GMT (so you're more likely to catch Larry Wall, nick TimToady) visit the freenode IRC channel #perl6 (eg go to [https://kiwiirc.com/client/irc.freenode.net/perl6](https://kiwiirc.com/client/irc.freenode.net/perl6) and enter a nick) and enter 'hi'. There are on channel evalbots and folk who will be happy to show you a well designed and continuously improving Perly blend of FP, OO, etc.

Yesterday's log is at [http://irclog.perlgeek.de/perl6/yesterday](http://irclog.perlgeek.de/perl6/yesterday). Hope to see you in the log. :)

</comment></comment><comment><USER52> I tried somewhat Pollen and it's kind of fantastic, the only thing is getting to work with a new project in a language that I don't know very well is difficult for me. That's why I started a similar project in Python, watch [https://warehouse.python.org/project](https://warehouse.python.org/project) if you interested /azoufzouf/

<comment><USER52> I just pushed the code. You can have a look at it @ [http://amirouche.github.io/azoufzouf/](http://amirouche.github.io/azoufzouf/) there is all you need to know and ⵣcode{pip install azoufzouf}.

With that markup, it's easy to plug any function you want. That's right. It's not nested and is inspired from unix philosophy, I dare to say. I tried several time Sphinx, docutils alone and other markups they don't deliver as much as this one (sofar).

</comment></comment><comment><USER53> Not sure how closely you have read Siebel - your 1st few points are covered pretty comprehensively at the start of his book

</comment><comment><USER54> I think it's kind of sad that most of the comments in this thread are about other languages than Racket and only barely touch on the articles points (mostly the stuff you don't need to actually try the language (or any lisp) to comment on). I think it says a lot about what the crowd on HN is really all about.

</comment><comment><USER55> My personal experience with Clojure has been that it 'bends' the brain - in a good way, and it forever changes the way you program. It is extremely difficult to go back to the style of coding I did before my exposure to Clojure. I guess other Lisps would provide a similar experience.

</comment><comment><USER56> Nice write-up. I really like Racket, but never had a chance to use it in a professional project so far.

By the way, Scribble (item 7) is an implementation of Literate Programming - <USER3> feature is some other languages too. In Haskell, for example, you can write programs in Latex with embedded code.

</comment><comment><USER57> Re 1. everything is an expression benefit, condition example:

C-like languages often have the ternary operator, _cond?exp1:exp2_ , that is exactly this. I feel clever using it, but I consider it a hack, because it's (usually) less clear. A microcosm of lisp, clever but unclear.

<comment><USER58> I think it mostly seems unclear in C because of the syntax.

If you could write this in C, would it still seem unclear?

        int x = if (y == 0) then 7 else 10;

As opposed to one of these:

        int x;
        if (y == 0)
          x = 7;
        else
          x = 10;

or

        int x = 10;
        if (y == 0) x = 7;

It makes everything local, and in my opinion reduces cognitive load.

<comment><USER57> (speaking for myself only): I find the _?:_ syntax clearer... probably because I've known it for so many years. It's the doing several things at once that, for me, makes it unclear.

Of your examples, I find the very last one the clearest. Arguably, it's a hack, because it assigns values twice to _x_ \- but it feels like the syntax embodies the semantic truth of _y==0_ being an exception. A pattern matching solution (with a specific and then a general rule) would also embody this, but to me, having the general rule first, with a following exception, seems more intuitive.

Disclaimer: "intuitive" is all very subjective, and it's certainly possible that with experience, my intuition could change. But for better or worse, the above is my opinion today!

PS: I do think your first example is cool, neat and clever. I understand and feel that aspect of the appeal.

</comment></comment></comment><comment><USER59> Many of the last items in the list should be in the category "Scheme". Racket is a dialect from Scheme, but it still is a Scheme. The syntax-case macro transformations are available in most Scheme systems.

<comment><USER11> > Many of the last items in the list should be in the category "Scheme". > Racket is a dialect from Scheme, but it still is a Scheme.

The name was changed to Racket from a name with "Scheme" in it because its not a Scheme in the strict sense; Racket does not conform to any of the Scheme reports (though its bundled with language definitions that do, as well as lots of others, but the Racket language, while near Scheme, is not.)

<comment><USER60> > because its not a Scheme in the strict sense; Racket does not conform to any > of the Scheme reports

The same could be said for many, if not most "Scheme" implementations.

Scheme didn't standardize stronger language abstraction features, otherwise what Racket offers aside its core implementation (unless they would deviate just for the purpose of lock-in) would just be Scheme libraries, and it would be fair to call it "the Racket implementation of the Scheme language, which comes bundled with more involved language libraries than most".

From a marketing standpoint, their move is good for them and bad for the Scheme community because they imply that "Scheme" as a brand or community isn't able to support the languages that they are implementing. They may have the finances and manpower to make it work for them, but it leaves out the community from which they have grown. I'm not deep enough inside the community to know all the factors that lead to this but as a fringe participant it seems (more than?) somewhat untruthful and disappointing.

</comment></comment></comment><comment><USER61> Is it just me or is this page entirely blank? I poked through the source for quite a long time, but couldn't undo it. The text is there. There is something in the CSS that obscures it in Chrome. So annoying.

</comment><comment><USER62> Why does Racket perform so slowly on benchmarks compared to Clojure and SBCL?

<comment><USER63> > Why does Racket perform so slowly on benchmarks compared to Clojure and > SBCL?

Clojure benefits from the optimization of the JVM and SBCL has a couple of pretty bad-ass hackers working on the compiler. Racket on the other hand uses a pretty of the shelf JIT compiler which might not be as specialized as the other two.

Language-wise, there is hardly anything that would make Racket inherently slower than Clojure. Maybe continuations.

</comment></comment><comment><USER64> When visited with w3m I got spaces breaking words frequently. Is there any justification to use complex html to control intra-word spacing for a web page?

<comment><USER65> Those are soft hyphens, which supplement the crappy hyphenation support built in to most browsers. w3m should probably just ignore them, but it looks like your version is broken[1].

[1] [https://bugs.debian.org/cgi- bin/bugreport.cgi?bug=441934](https://bugs.debian.org/cgi- bin/bugreport.cgi?bug=441934)

</comment></comment><comment><USER66> Many of the reasons you wrote are the same that got me attracted to Elixir. That and of course erlang interop and OTP.

</comment><comment><USER67> It's kind of interesting that the author's examples of 'woah! look at all these cool packages' include plotting, unit testing, and a gui. Those standards feel a little low to me.

</comment><comment><USER68> "Clarity is an evidence" as the saying goes. This post only proves its correctness.)

The distinct feature of Lisps and good lispers is clarity of thought and conscience of writing.

</comment><comment><USER69> That's some pretty ugly text for a site called 'practical typography'.

<comment><USER70> Oh? What makes you say that? On my OS X computer at least, it honestly looks gorgeous:

[http://f.cl.ly/items/3o2r3E2T2y3v3M3T291i/Screen%20Shot%2020...](http://f.cl.ly/items/3o2r3E2T2y3v3M3T291i/Screen%20Shot%202014-08-21%20at%203.10.46%20AM.png)

<comment> fake-name Yeah, except the obnoxious diamond symbols used to denote each link, rather then underlining them, like has been standard for 20 years now.

<comment><USER71> Underlining isn't very attractive, either, even if it's standard. I don't _mind_ the diamond, but I'm not very enthused by it, either.

</comment></comment></comment></comment><comment><USER72> Please.... text-align: justify; ...

<comment><AUTHOR> Please... see [http://practicaltypography.com/justified- text.html](http://practicaltypography.com/justified-text.html) for the author's opinion.

Personally I believe that Matthew is wrong there. There's no justification for justification. :-)

<comment><USER73> Also on that page: "Justification is a matter of personal preference. It is not a signifier of professional typography. "</comment></comment></comment>


How To Ask For An Email Introduction - <AUTHOR> http://life-longlearner.com/how-to-ask-for-an-email-introduction/

<comment><USER2> Helpful post. How do you avoid that the potential intromaker replies:

 _"Just send me more infos + your pitch deck and I'll forward it."_

Basically, the intromaker tries to stay as a gatekeeper between you and the target. Then, you are stuck for some time and the following process is not transparent, anymore. Happens often and is annoying.

<comment><USER3> It means their relationship with target X is strong, but your relationship with them is _not_. They don't feel like they can vouch for you, and it's unlikely you can get a genuine introduction/endorsement from them under any context.

IMO that is a sign to look for another avenue to talk to target X.

<comment><USER2> No, I disagree two times on "relationship with target X is strong" and on "They don't feel like they can vouch for you". This may be the case be but must not necessarily, the motivation for such a behavior comes from my experience usually from somewhere else:

If one replies as I posted it's rather a strong sign that this person wants to control the relationship and the process as long as possible in order to particiipate—usually by getting some "advisory shares". We know that those shares should be given to people who made key intros (it's an unwritten law) but still it's cumbersome to deal with this kind of intromakers because they instantly show distrust to you (and more and more are getting like this)

</comment></comment></comment><comment><USER4> This is a great post by Chris Fralic from First Round Capital on the subject: [http://techcrunch.com/2010/04/04/the-art-of-the- introduction...](http://techcrunch.com/2010/04/04/the-art-of-the-introduction- top-ten-tips/)</comment>


Show HN: DrudgeNewsletter.com – my weekly project - <AUTHOR> http://hn.drudgenewsletter.com/

<comment><AUTHOR> I mentioned it on HN somewhere before that I think it would be nice to have a Drudge weekly news recap for all of us who don't have time to track DrudgeReport on a daily basis, and in my opinion, DR is an awesome place to find news as much unbiased as possible :)

So here it is. Let me know what you think. An example/last issue is here: [1]

Developer notes:

Environment: simple PHP/MySQL, no framework. Any development issues: not too much. The new thing I learnt is how tricky Gmail and Yahoo webmail are in regards to HTML emails. For example: GMail will replace black links with blue ones; both "color: #000000" and "color: black" will get stripped away. Hackerish solution: set the color to "#000001" and you good to go. Yahoo will overwrite links even nastier: both with their own colors and will apply their Ads for keywords in your links (it puts additional dashed blue line underneath your links). Hackerish solution: overwrite their "yshortcuts" class in all tags: span, div and a. Generally, webmail providers do not like when you apply any styles to links. To make sure you tried your best, apply your style in multiple tags, like this
link
 . This will increase your chances of getting your links the way you want them to look. I haven't tested with Hotmail or AOL and frankly I am scared of doing so, but will play with it soon. Also always use tables (still love them) to format your content (or rather should say: to force formatting).

Algorithm notes:

There is no secret sauce, per say. I monitor Drudge in 5-minutes periods and capture basic info: article name, link, position, photo, etc. I monitor first and last changes for a day, since Matt does not work 24/7 :) At the end of the week (Friday 6pm est) I analyze the links pool (fri-fri) per column, and pickup only the ones that spend "enough" amount of minutes/hours on the site. Then review results and pickup the most interesting (I've been Drudge constant reader for about 5 years now) and organize links in easy to read flow of news. As you can see in the last issue [1], I try to presume links and photos' outlook in original way, and try to interfere into UX as little as I can. Note that this is a week old project, with just one issue sent out. I welcome all your thoughts, suggestions, etc.

Advertising notes:

I tried some paid tweets but since the users that are willing to sell those usually tweet about music, girls and fun stuff, I got very little clicks. I run a simple CPM campaign on Facebook and while click-through rates are obviously low (0.01%), the remaining fact is that 90% of people that click and went to the site end up signing up. I think it's a huge success; unfortunately the CTR rates for FB are low, because people go there to watch friends' photos and post status updates, not to look on ads. Personally, I unconsciously trained myself not to look at the spots where ads are. So even with conversion rates of 90%, the 50 cents per CPM I still end up paying $1 per signed user. Too much.

Marketing notes: this one I left out to you. I am mostly a computer programmer and lack knowledge on advertising an online newsletter like this one. Any help from your side as to how I can build a DrudgeNewsletter userbase will be appreciated. With very good conversion rates on FB, I plan to put some money into advertising it, so if you have a vehicle that you think I should take advantage of in regards to spreading the word, please definitely let me know.

[1] <http://drudgenewsletter.com/latest/></comment>


The Scottish Book - <AUTHOR> https://en.wikipedia.org/wiki/Scottish_Book <comment><USER2> I wonder if something like this would be useful for software engineering / computer science?

I understand the domains of inquiry are quite different, but having a place to put open questions, answers, etc. that is limited in some way would be interested.

The limitation that springs to mind immediately is one of social circles, so something like Stack Exchange, but for a social circle (defined by courses at a university, or people that you work with, or other constraints).

Other constraints could be useful as well.

<comment><USER3> I think there's an inherent problem between programmers/software engineers and the rest of the science/math community when it comes to their outlook on life. There was a post, I think last year, on HN on famous science, math, dev, physics quotes. It was just a large list really. Anyways, when you read through them, you pick up that in other technical professions, they have a rather bright, happy outlook on life. Science is a way to bring joy to the world, some way some how. Even math is a way to find the beauty in the natural world. Humanity's pursuit in the sciences will make the sky bluer. Hope is powered by the study of physics.

Every quote by a dev/coder/cs quote amounted to, "The light at the end of the tunnel is an oncoming train."

I do agree it would be interesting for a computer science version of this and in practice would be online similar to a Slack Exchange or Reddit format... but reality is, it's going to be a dumpster fire without a nuclear-powered- iron-fist of keeping the peace.

</comment></comment><comment><USER4> [https://day.kyiv.ua/en/article/society/scottish-book- lvivs-m...](https://day.kyiv.ua/en/article/society/scottish-book-lvivs- mathematical-relic)

very interesting, from the page references

</comment><comment><USER5> Oh please let there be pi on the menu.

</comment><comment><USER6> The fate of so many of those people is heartbreaking.

Murdered, murdered, imprisoned, fled, murdered, "lice feeder", fled, murdered, murdered, murdered.

"Never again" is something to take very, very seriously.

<comment><USER7> Indeed. The Nazis took special care when occupying Eastern Europe to seek out and kill anyone who could qualify as an intellectual (see [https://en.wikipedia.org/wiki/Intelligenzaktion](https://en.wikipedia.org/wiki/Intelligenzaktion)).

They wanted to reduce the Slavic peoples of the east to a slave caste, a dumb, unthinking labor force suitable only for hard manual labor. So anyone who had demonstrated a facility for the work of the mind -- scientists, artists, teachers, civil servants, and so forth -- had to go.

<comment><USER8> Clumsy brutes. Instagram or Twitter should be enough.</comment></comment></comment>


Beyond image classification: releasing four specialized detection APIs - <AUTHOR> https://blog.deepomatic.com/beyond-classification-announcing-our-image-detection-apis-363707d73c32 <comment><AUTHOR> Deepomatic just released four specialized image detection APIs: fashion items, furniture and decoration, street scene and weapon.

[https://vimeo.com/194022746](https://vimeo.com/194022746) to see in action</comment>


Show HN: Maxx Bench – Gravity Release Bench Press - <AUTHOR> https://www.kickstarter.com/projects/754670088/maxx-bench-first-ever-gravity-release-bench-press?ref=video

<comment><USER2> Notice how the lifters push their chest up? It helps with lifting in several ways but it also keeps the bar higher than the safety "catchers" on the side. Lie flat on your back and these catchers are above chest height and at all time they are above neck height.

The proposed technology would not really have saved the guy in the example clip.

</comment><comment><USER3> Sadly most of the gym I've been to in my life don't use benches with those "side catchers" so it wouldn't be really useful in those case.

That aside, looks like a really cool project. I wish you guys best of luck</comment>


Dear MBAs who want to work at startups  - <AUTHOR> http://www.thisisgoingtobebig.com/2010/01/dear-mbas-who-want-to-work-at-startups.html#ixzz0e2JbK1Dm

<comment><AUTHOR> Best Quote:

You know what startups hear when you say "help their strategy"?

"This person is going to write a report." Startups don't need more reports. Some of them don't even have printers.</comment>


Supreme Court rejects industry challenge of 2015 net neutrality rules - <AUTHOR> https://arstechnica.com/tech-policy/2018/11/supreme-court-wont-rule-on-legality-of-obama-era-net-neutrality-rules/ <comment><USER2> More details here: [https://arstechnica.com/tech-policy/2018/11/supreme-court- wo...](https://arstechnica.com/tech-policy/2018/11/supreme-court-wont-rule-on- legality-of-obama-era-net-neutrality-rules/)

I'd like to point out that this is may only be _temporary_ victory. Roberts and Kavanaugh recused themselves, and they both would have voted _in favor_ of the challenge if they had voted. If at any point in the future the issue is retried and the two justices don't recuse themselves, a majority of the SCOTUS would side with the Telecoms.

<comment><USER3> Any word on why those judges recused themselves?

<comment><USER4> From what I've seen:

Kavanaugh dissented on the lower court ruling (as it happened while he was still part of said lower court). So, he recused himself from re-hearing the case.

Roberts has major holdings in Time Warner Cable, now merged with AT&T. AT&T was part of the case, so there's a conflict of interest there.

<comment><USER5> > Kavanaugh dissented on the lower court ruling (as it happened while he was > still part of said lower court). So, he recused himself from re-hearing the > case.

This is an interesting reason to recuse. You're supposed to recuse in cases where you cannot be impartial (or, similarly, where you cannot appear to be impartial, regardless of your inner thoughts).

Recusing because the defendant is your brother makes sense. But Kavanaugh was presumably offering a standard, "impartial" judicial opinion when he dissented on the lower court. It's definitely true that he's likely to come into the case at the Supreme Court level with a preformed opinion of the merits. Superficially, that's an obvious reason to recuse. But why? That preformed opinion was, by hypothesis, formed by considering the merits of the case as an impartial judge, which is the only thing he's supposed to do when hearing it in the Supreme Court too.

<comment><USER6> Because of [https://www.law.cornell.edu/uscode/text/28/47](https://www.law.cornell.edu/uscode/text/28/47)

It makes sense. When you appeal you want a different person's opinion, not the same person's multiple times.

<comment><USER5> It makes less sense on closer examination than it does at first glance. I want a different person's opinion when I lose in court, regardless of whether I do appeal or whether I can appeal. But wanting it doesn't mean there's a reason I should get it. I can appeal to a higher court because the higher court has authority over the lower one; the basis for an appeal is that the lower court made a mistake, not that I personally feel that I'd be better off with a judgment going the other direction.

<comment><USER6> Courts make mistakes (in the appealer's view) because people misinterpret evidence/the law. If you get the same people in a higher court the same mistakes will happen again.

<comment><USER5> But mistakes in the appealer's view don't matter. You win an appeal if the lower court made a mistake in the view of the higher court.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> In the strangest of ways, I hope that ISPs do get the ability to "exercise editorial control" \- because I think that will be the proverbial straw that breaks the camels back (i.e., sparks the kind of innovation needed to break the ISP monopoly).

<comment><USER8> > i.e., sparks the kind of innovation needed to break the ISP monopoly

How so? Internet is infrastructure, LTE is infrastructure (from the same ISPs) - mesh networks don't scale due to inefficient wifi and too little spectrum. You can't break physics.

The innovation you have is paying for a VPN and pay up for your non-ISP- netflix traffic.

What do you think would be possible? If it's over the air it will be regulated and licenced (i.e. non public spectrum) and if it's not over the air you have huge costs nobody is willing to pay to build a network (even Google ditched Fiber due to costs?)

<comment><USER9> They wouldn't be using the term innovation if the solution was obvious... Within the options you laid out, perhaps advances in mesh networking working in combination with licensing non-public spectrum would cut it. Certainly Amazon, Google, Facebook and Apple have the resources to make something else work if the current ISP's get massively out of line.

<comment><USER10> They'll do what we've seen companies do time and time again, use their deep pockets to position themselves to take best advantage.

</comment></comment></comment></comment><comment><USER10> People here have been worried about providers like GoDaddy when this excerpt arguably has the potential to be much worse; "Kavanaugh dissented from the ruling upholding net neutrality rules in 2017, arguing that the rules violate the First Amendment rights of Internet service providers by preventing them from "exercising editorial control" over Internet content."

</comment><comment> gjsman-1000 I might not _like_ this result, but I do understand why Net Neutrality can be regulated or deregulated. Even if the Supreme Court took the case, I'm more curious on what the industry would even defend net neutrality _by_.

I mean: Drugs, Birth Control, Healthcare... all able to be regulated. I'm not sure how they would argue against Internet regulation.

<comment><USER11> Changing gears slightly, what would you like regulated about the Internet?

<comment><USER12> My understanding is the issue at hand is whether the government can block ISPs from metering and throttling different kinds of traffic differently.

Net neutrality = yes, legislators can say all ISPs must be neutral to traffic content

Non-neutrality = no, legislators may not regulate the way ISPs differentiate traffic because traffic differentiation is speech

</comment></comment></comment><comment><USER13> What's with the "Beer enthusiast" comment?

<comment><USER14> During the confirmation hearings Kavanaugh repeatedly explained his high- school (and presumably college) activities by defensively and repeatedly emphasizing that "I like beer".

Regardless of any good/bad quality of it, he was clearly defensive and memorable, and many memes were born. I'd suspect that ~arstechnica~ [Edit: Guardian, link was changed since I first read it] is showing how "hip" and "with it" they are by bonding with their audience on this point - so far as I know, some of those both those for and against Kavanaugh's confirmation made fun of that exchange, so while I'd not be surprised to find an anti-kavanaugh tilt in the author, I suspect the inclusion was for less political and more marketing reasons.

<comment><USER2> The term "beer enthusiast" was actually used in the Guardian article that was originally submitted--it appears nowhere in the Ars Technical article.

</comment></comment></comment><comment><USER15> A real doozy of an excerpt from the article:

> Kavanaugh dissented from the ruling upholding net neutrality rules in 2017, > arguing that the rules violate the First Amendment rights of Internet > service providers by preventing them from "exercising editorial control" > over Internet content.

Jesus fucking christ.

<comment><USER12> I appreciate the quote but I don't appreciate your comment. It seems to serve no purpose but to be inflammatory. To signal to "your people" that you're with them, and signal to everyone else that you think they're an idiot. I have half a mind to flag it.

I like neutral ISPs, but I think Kavanaugh is probably correct, from a strictly constitutional sense ISPs should have a right to modify traffic in any way they like.

If you disagree, at least give me a hint as to your thinking.

<comment><USER16> Yea. I may not like the idea of it but from a strictly constitutional view it seems correct. ISP's are private entities after all. We already have major social media platforms, hosting providers, domain registrars, payment processors, credit card companies, even DDoS protection companies all "exercising editorial control" of content, so why not ISP's?

The argument of "ISP's choice is very limited in many areas, so it's different" seems rather weak to me. You can just use a cell carrier, or satellite, or even dial-up. If that sounds like "you can just start your own social media platform, your own website, your own payment processor, your own registrar, or just be accessible through an IP address, or tor etc." it should. All those options suck. Yet the people who are most militant about Net Neutrality are usually totally okay with every other private entity doing whatever they want (as long as it ends up aligning with their ideology).

I'm not here to suggest any solution to all this, just to say I don't think there's anything untoward about a judge ruling in line with the first amendment of the Constitution. Ideally this whole mess will lead us towards more competition and decentralization on the Internet, but given the way it has developed in the past 20 years, I'm not very hopeful.

<comment><USER17> >so why not ISP's?

Because it has to effing stop _somewhere_ , that's why.

Sorry, but saying that giving government-granted telco monopolies[1] a right to censor content is "in line with the first amendment" is the most bizzarre thing I've seen today.

[1]Neither spectrum nor the right to lay down cables are a free market.

</comment></comment></comment></comment><comment><USER18> The Supreme Court is good at avoiding theoretical cases. Basically, the original net neutrality regulations were already rescinded by the Trump administration. Because of this, the Supreme Court has no reason to intervene as it is a moot point.

<comment><USER19> That's actually not at all what happened here. The Supreme Court decided not to hear challenges to the FCC policies under the Obama administration. In other words, Trump and Pai did not get their way this time.</comment></comment>


Obama to Call for End to N.S.A.'s Bulk Data Collection - <AUTHOR> http://www.nytimes.com/2014/03/25/us/obama-to-seek-nsa-curb-on-call-data.html <comment><USER2> Note that there are two proposals here, much like good cop (Obama Administration) and bad cop (House Intelligence Committee[1]), but both leave broader §215 authority intact i.e. business records not to mention §702 and Upstream collection.

Both also seem to be attempting to reinstate the full Telephony Activity Detection Process which they haven't been able to do legally since 2009[2][3] due to alert abuses[4].

[1] [http://online.wsj.com/news/articles/SB1000142405270230394970...](http://online.wsj.com/news/articles/SB10001424052702303949704579459823138066260)

[2] [http://arstechnica.com/information-technology/2013/12/the- na...](http://arstechnica.com/information-technology/2013/12/the-national- security-agencys-oversharing-problem/2/)

[3] [http://www.emptywheel.net/2014/03/24/nsa-bids-to-expand- spyi...](http://www.emptywheel.net/2014/03/24/nsa-bids-to-expand-spying-in- guise-of-fixing-phone-dragnet/)

[4] [http://www.emptywheel.net/2014/01/23/how-nsa-spies-on- first-...](http://www.emptywheel.net/2014/01/23/how-nsa-spies-on-first- amendment-protected-speech-the-eo-12333-loophole/)

</comment><comment><USER3> _call_ records? Are you shitting me? The White House is acting like Grandpa trying to wrap his mind around the concept of the Internet. "overhaul", "new kind of court order". Yeah, okay.

Here's the broom, Obama. Need a little help sweeping it all under the rug?

<comment><USER4> This. I've noticed how the government and most established/traditional media outlets keep referring to the NSA phone metadata stuff as if that were the only disclosed program worthy of review. But what about Prism, etc?

<comment><USER5> Etc.? More like etc. etc. etc. etc. And as the folks working with Greenwald have noted, there's plenty more to come. The easier to digest stuff is what's appeared to date. The more complex programs - i.e. the ones that take more time to fully grasp - are what they're still working through.

</comment></comment></comment><comment><USER6> You ever notice how President Obama acts like he's nt in charge of the government? The whole "outsider" schtick doesn't really work 6 years into your Presidency.

<comment><USER7> That's probably because he isn't really in charge of it. But he makes a better figurehead than the last bozo I guess.

<comment><USER8> We need leaders, not figureheads.

<comment><USER9> Sounds great, you should run for the job. I'm sure if we just elected someone who was leader-y enough, they'd be able to turn that ship on a dime.

<comment><USER10> A true captain can stop a ship if it's heading into rough waters, even if he can't turn it around. A single executive order could cause everyone at NSA to take a paid furlough, just as a single executive order could close Guantanamo.

Obama has sworn, twice, to preserve, protect, and defend the Constitution of the United States. If there's something truly worth defending about bulk collection, something so important that it's worth compromising the Constitution, he should tell us why he's breaching the trust our electors placed in him.

<comment><USER9> I'm dissapointed in Obama on this issue too, especially compared to his history of statements before becoming president, but I can't even list the ways that metaphor ran off the rails.

</comment></comment></comment></comment></comment></comment><comment><USER11> Watch this very carefully. I predict that this purported effort to curb bad behavior will in fact attempt to legitimize the very bad behavior most of us find contemptable. Having shined the spotlight on the really bad behavior, I predict this administration will then find an only half-bad solution to tout as a compromise.

[http://www.al-ruh.org/hegelian.html](http://www.al-ruh.org/hegelian.html)

<comment><USER12> Wow... I just spent an hour reading and rereading that small bit of text you linked to. I was never even aware of such a thing.

What a powerful idea. Thanks for pointing out the possible connection here.

<comment><USER13> See also [http://en.wikipedia.org/wiki/Overton_window](http://en.wikipedia.org/wiki/Overton_window)

</comment></comment></comment><comment><USER14> We don't need a law. These programs are a violation of the constitution. What Obama and his cronies are trying to establish is the govt's unlimited power of surveillance. If this passes then it implicitly accepts the premise that their policies could be legalized at anytime by a future president under future "national interest" circumstances. This is how dictators are established.

<comment><USER15> NSA is executive, he doesn't need a law, he can turn it off RIGHT NOW. Sure get a law in place, but dont pretend you have to go through congress to do it.

<comment><USER14> > Sure get a law in place,

No, you don't get it. Getting that law in place is _exactly_ what they want because it avoids the Constitutional challenge. Obama and company must sense that there is a lot of opposition to the spying, so this is merely a delay tactic awaiting another WTC bombing or equivalent to change the law back.

The advocates of freedom need to reject this tactic and push this issue to the Supreme court where it belongs. It is not an Executive or Legislative branch issue it is a Constitutional issue and it needs to be stopped on Constitutional grounds not as a matter of legislative action.

<comment><USER16> > The advocates of freedom need to reject this tactic and push this issue to > the Supreme court where it belongs.

You see what's going on, but reason a bit further. The Supreme Court is part of the same government that's in the process of establishing a full police state / tyranny. Do you think they're not part of the problem?

Can a police state's Supreme Court be independent, objective, and intent on preserving freedom? -I wouldn't bet on it.

Get out while you can?

<comment><USER14> This is the system we have and it needs to run its proper course. If the Supreme court won't uphold our rights then obviously we have a serious problem. This has not happened yet. The other alternative is if the Supreme court rules spying is unconstitutional but then they are just ignored by the Executive branch and they do it anyway. We'll have to cross these bridges when we get to them but for now there is still constitutionally protected rights and limited government.

> Get out while you can?

There really is nowhere to go. We have to fight for America.

<comment><USER15> It is a wonderful place with wonderful people. No reason to leave it to a small number of greedy who will ruin it and everyone around them.

</comment></comment></comment></comment></comment></comment><comment><USER17> I think this proposal is a real and considerable improvement in the national security apparatus. For which we have Snowden's revelations sparking of a national conversation to thank.

Recall Snowden's original statement [1]:

"these things need to be determined by the public and not by somebody who was simply hired by the government."

The information changed public opinion[2]:

"[In January 2014], 40% approve of the government's collection of telephone and internet data as part of anti-terrorism efforts, while 53% disapprove. In July [2013], more Americans approved (50%) than disapproved (44%) of the program."

[1] [http://www.policymic.com/articles/47355/edward-snowden- inter...](http://www.policymic.com/articles/47355/edward-snowden-interview- transcript-full-text-read-the-guardian-s-entire-interview-with-the-man-who- leaked-prism)

[2] [http://www.people-press.org/2014/01/20/obamas-nsa-speech- has...](http://www.people-press.org/2014/01/20/obamas-nsa-speech-has-little- impact-on-skeptical-public/)

</comment><comment><USER18> A lot of reactions to Obama's decisions seem to remember that he was the guy on the _Hope_ posters, but not that he was the guy who told PolSci majors how politics was heart-wrangling, soul-blackening compromises, all the time -- and that you needed to keep the eye on the bigger prize, because you'd have to sacrifice everything just under it.

Obama promised to save tens of thousands how American lives (and ten times as many Middle-Eastern) and the budget by scaling down physical operations. To do that, he had to grant the intelligence and military personnel everything else, if only to avoid a coup. I hate the compromise, but I can't imagine making a different choice.

Yes, that appears to be extremely disappointing, but more than actual deescalation of the surveillance apparatus, what he is working on is to make the Intelligence community realise that they went too far, and that the fact that Snowden could get so much information was a problem in itself. You don't tear things away from people when you want them to contrite, not significantly: that comes later. Right now, most people in that community want to drop a Hellfire on the guy: saying he was right to do what he did, and to follow his recommendation would be akin, for the US operatives, to have the US adopt Sharia law on Christmas 2001 because Ben Laden asked for it.

Give them time.

Show a guy who is articulate, considerate and criticise his actions 'but his ideals where not far off…'; show how targeted collection help keeping focus, show how judicially-sound investigations help avoiding mistakes… The NSA will feel confident to take off the side-wheels (still 'protect the Homeland' without the all-access) but that's later, alas.

</comment><comment><USER19> Cool! What about the _content_ [1] of emails, text messages, Skype conferences, etc...

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

<comment><USER20> Is it sad I knew exactly what that room was before clicking the link?

<comment><USER21> Not any sadder than demanded by the implied existence of the room. It's the only Room #### that's been talked about in this context.

</comment></comment></comment><comment><USER22> It's interesting that a program which the NSA's director claimed to congress didn't even exist, which was created by the executive branch requires the legislative branch to terminate it.

I'm pretty sure this could be solved by executive order, and/or the DOJ filing with the petitioning the SCOTUS to rule it unconstitutional.

<comment><USER23> > It's interesting that a program which the NSA's director claimed to congress > didn't even exist, which was created by the executive branch requires the > legislative branch to terminate it.

IIRC, the Guantanamo terrorist prison program was also created without congressional action, yet its closure was successfully prevented by Congress -- or at least, congressional opposition to closing it was sufficient for Obama to escape blame for failing to close it as he had promised during the election.

So, this could just be a plan to transfer blame for the NSA onto Congress. If he proposes a bill to reign in the NSA that he knows Congress will not pass, it maintains the status quo but he can say that _he_ wanted to end it.

<comment><USER15> Yes. The solution to pollution is dilution. He needs to spread "the blame" across all of congress. Just like gitmo.

He sends legislation to congress to "fix" the problem and it never gets through. The whole thing is a smoke screen.

</comment></comment></comment><comment><USER24> So according to the report, Obama is going to propose legislation that:

\- Would end the NSA's authorization to collect bulk call records from telephony providers under §215.

\- Would require the NSA to require court approval prior to every §215 call record request. Up to 2 hops worth of call records would be included.

\- Won't require that telecoms maintain anything more than the 18 months of call records that they are already obliged to hold.

The devil's in the details, but it sounds like a big change from the existing call records program. If Congress passes something along these lines, it'd be a major win.

But the §215 call records program is just a very small component of the objectionable surveillance programs. Here's just a sampling of the others:

"Upstream" collection: The sort of thing that happens in AT&T's Room 641A - fiber optic cables intercepted, data captured (under program names Fairview, Blarney, Stormbrew, Oakstar). Auth'd under Executive Order 12333 and the various FISA laws [1]. Searched using the XKEYSCORE frontend. GCHQ has similar program called Tempora which the NSA has access to.

MUSCULAR: Jointly run by GCHQ and NSA, collects data as it passes between the backend servers of services like Yahoo and Google. [2]

PRISM: Auth'd under §702, allows NSA to request data from tech companies about anyone who might be "reasonably believed" to be outside the US.

BULLRUN: Various efforts to break encryption, including attempts to insert vulnerabilities into encryption standards. Snowden's security clearance wasn't high enough to get any real details on exactly what the NSA has achieved as part of BULLRUN [4].

I think the scariest of those is Bullrun. We don't (and likely won't) know to what degree the NSA has managed to break or circumvent encryption [5].

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

[2] [http://www.washingtonpost.com/world/national-security/nsa- in...](http://www.washingtonpost.com/world/national-security/nsa-infiltrates- links-to-yahoo-google-data-centers-worldwide-snowden-documents- say/2013/10/30/e51d661e-4166-11e3-8b74-d89d714ca4dd_story.html)

[3] [http://www.theguardian.com/uk/2013/jun/21/gchq-cables- secret...](http://www.theguardian.com/uk/2013/jun/21/gchq-cables-secret-world- communications-nsa)

[4] [http://www.eweek.com/blogs/security-watch/nsa- bullrun-911-an...](http://www.eweek.com/blogs/security-watch/nsa- bullrun-911-and-why-enterprises-should-walk-before-they-run.html)

[5] [https://twitter.com/nicoleperlroth/status/376481848760606720](https://twitter.com/nicoleperlroth/status/376481848760606720)

<comment><USER25> Perhaps the scariest thing is their plan to collect and store all data on all of your activities, then retroactively mine it. That is, from the moment you use the internet for the first time as a 9 year old until the day you die as an 89 year old, every text message you send, every email you write, every website you visit, and (if you're thinking of becoming a politician) every nude picture you send can potentially be used against you.

The reason this is scary isn't just because of the present social climate. The current social climate is actually pretty decent. The reason it's scary is because social climates can change quickly. A couple decades from now, what you did legally today may be illegal. If you're pursued and prosecuted, it's possible someone may dig through this vast trove of collected data and use it against you.

Clapper (the head of the NSA) has taken the stance that it's okay to collect everything, and that a "search" hasn't taken place until some human actually tries to look through that data. He frequently uses the analogy of a library: it's okay for the NSA to have all the books (everyone's data, everywhere) because a search hasn't taken place until they take one of the books off the shelf and look through it.

The temptation to use that library for purposes other than curbing terrorism must be pretty strong.

I'm going to speculate for the sake of example. It was often cited that one of the reasons for the 9/11 attacks was that the agencies weren't cooperating. As such, there has been a lot of pressure for the agencies to work together since then. I'm going to guess that if the FBI hadn't eventually tracked down DPR on their own, they may have tried to turn to the NSA for help. While it's not clear that the NSA has those kinds of capabilities, they're certainly more capable than the FBI at breaching the Tor network. There are slides out there which say something along the lines of "... we're able to deanonymize individual targets, not everybody at once."

That example is a little bit unrelated to "collecting all data about everybody and then mining it," but remember that if the agencies begin cooperating in that fashion, sharing that trove of data may be the next logical step.

I apologize for speculating, and my speculation should be treated as such. But please realize that just because they're not doing that to Americans yet doesn't mean they're not doing it to citizens of other countries with impunity today.

Here's another ancillary point. It should be no surprise that the NSA could probably find out the identity of Satoshi Nakamoto pretty easily. But my point in bringing that up is this: if Satoshi himself cannot stay anonymous, then what hope do any of us have? Anonymity may be dead at this point. It's pretty clear that humans will continue to live even if that's the case, but a world without privacy is going to be a very strange one.

By the way, I should also mention that the GCHQ may be even more capable than the NSA. There are signs that the NSA are better at pulling off attacks (Stuxnet, Tailored Access Operations) but that GCHQ are better at collecting data (bypassed Google's encryption). It has also been hinted that whenever the NSA runs into roadblocks against investigating Americans, they enlist the help of the GCHQ since it's legal for them to do so (and vice-versa). So even if the NSA is reformed, there is still this spectre of this worldwide data collection and governmental collaboration hovering over society.

<comment><USER26> _Perhaps the scariest thing is their plan to collect and store all data on all of your activities, then retroactively mine it_

This is the biggest grey area/ major issue. The issue is not just 4th amendment stuff (reasonable expectations of privacy), but selective disclosure and prosecution (ie, equal protection). The use of this for blackmail would be come ~irresistable to those seeking to cling to power. And this kind of stuff is why the bill of rights exists.

<comment><USER27> The problem is that the selective disclosure and prosecution are very easy to abuse without violating the text of the constitution; especially when the average American commits three imprison-able offences per day, because of the number of criminal laws, and their breadth.[1]

[1] [http://online.wsj.com/news/articles/SB1000142405274870447150...](http://online.wsj.com/news/articles/SB10001424052748704471504574438900830760842?mg=reno64-wsj&url=http%3A%2F%2Fonline.wsj.com%2Farticle%2FSB10001424052748704471504574438900830760842.html)

</comment></comment></comment></comment><comment> line-zero It's not enough.

Don't "curb" the program. Don't "reform" it. We're not interested in a fucking "debate." Or striking a "balance."

END IT. END IT NOW!

GIVE US BACK OUR GOD-DAMNED RIGHTS!!

<comment><USER28> If you're asking for your rights _back_ , then you seem to acknowledge that you have none (I agree), in which case what is the point in asking for them back? (Or, demanding, verbally, as the case may be?)

</comment></comment><comment><USER29> Try all we want, we can't get back from this one. Once freedoms are gone, they are gone until revolution. That is why freedom/privacy issues you need to be overly cautious about and side with non-authority always to keep it in check.

</comment><comment><USER30> There is not need to be happy unless you read the real details of the legislation. I have a feeling that this is going to be mostly a carrot and stick like policy.

</comment><comment><USER31> Obama is a two faced back stabbing bus tosser. He had full knowledge of the program from the beginning. Stop falling for this crap, he is the one that commissioned the original program, and he is sending his own men to slaughter to protect his own hindquarters. He is the worst kind of sleezebag that exists...

Stop accepting these excuses from the leader of 'the most powerful nation on earth' and HOLD OBAMA ACCOUNTABLE.

</comment><comment><USER32> Obama can ask to curb or limit the NSA. But the NSA will tell him 'no'.

</comment><comment><USER33> This feels like a diversionary tactic to me, a way to lull the general public while allowing the real bulk data collection to continue unhindered.

The only truly meaningful action the President can take would be to suspend all operations of the NSA for an indefinite time and furlough the staff, while a thorough review is conducted and a public debate is held as to how much intrusion should be tolerated.

</comment><comment><USER34> And only for domestic spying.

People that aren't US citizens still get no protection at all.

</comment><comment><USER35> "In a speech in January, President Obama said he wanted to get the N.S.A. out of the business of collecting call records in bulk while preserving the program's abilities. He acknowledged, however, that there was no easy way to do so, and had instructed Justice Department and intelligence officials to come up with a plan by March 28 — Friday — when the current court order authorizing the program expires."

I don't see how you can maintain the programs abilities without giving it massive amounts of data - seems like someone is lying.

</comment><comment><USER36> Remember what Churchill said about the USA? Something like "The USA invariable does the right thing, after having exhausted any other alternative".

</comment><comment><USER37> Too little too late. When are the Democrats going to realize -- and I am a Democratic leaning Independent -- that their custodial control of the most extensive surveillance mechanism in the history of the planet is objectionable to the people like me who would normally support them.

</comment><comment><USER38> What about Internet traffic?

</comment><comment><USER39> Unfortunately, I was paywalled.

</comment><comment><USER40> President Obama can't issue an executive order in the meantime?

<comment><USER41> He can issue an order to wiretap, but not to retract.

<comment><USER42> Assuming it was an executive order (and I can't imagine it was anything but, although facts are slim pickings), of course he can "retract" it, using yet another executive order.

"EOs are published in the Federal Register, and they may be revoked by the President at any time."[1]

1.[https://it.ojp.gov/default.aspx?page=1261](https://it.ojp.gov/default.aspx?page=1261)

</comment></comment></comment><comment><USER43> Everyone prepared for disappointment?

</comment><comment><USER44> I'm glad he was careful to clarify that he would only try to end one of their many unconstitutional programs. Bravo for the man we all hoped would "change" things. More of the fucking same.</comment>