Do I Really Need a Programming Language? - momo-reina http://ayudasystems.tumblr.com/post/71327185334/do-i-really-need-a-programming-language <comment><AUTHOR> The real question here is "do I need syntax?", or, more precisely, "do I really need a [complex] grammar?" Any given Lisp is still a programming language--it has _some_ syntax and it has semantics. But it does have a _much_ simpler grammar than any language (save Forth).

The grammars exist because programs are made to be read by people, not just computers. A more heterogeneous notation can make for more concise code that's easier to scan and easier to read.

Of course, this is not to say that Lisp is unreadable. I actually rather like reading and writing (paredit is _awesome_ ) Lisp code. But, after quite a bit of Racket, I've found that I still heavily prefer having infix operators and a bit more syntax. At the same time, I also often want _less_ noise--ie no parentheses. I want all this so that I can quickly scan and comfortably read my code. That's why we need grammars.

<comment><USER2> I think a more helpful question would be "in what instances do I need syntax?". Could you build a type-system like Haskell has for LISP? Would it be usable?

In terms of syntax, I think there's a divide between the needs of static type- systems, versus dynamic ones. LISP is at its core a dynamic language. It makes sense to treat code as being data that can be manipulated. Getting rid of all that syntax gives you great power in terms of what you can do. And personally I find Clojure code to be much saner than code written in Ruby or Python, but that's another discussion.

However, the other side of the coin are Haskell or Miranda (its predecessor) or languages in the ML family or Scala. These languages go to great length to achieve much of LISP's expressiveness, while ensuring a great amount of static type-enforcement. Haskell is especially notable because Haskell is lazy and has many goodies, such as type-classes or rank-2 types. People say that when a piece of Haskell code successfully compiles it is usually correct. LISP can't do this, even though there have been experiments with pluggable type-systems.

For an excellent rant on the choice of Scheme for SICP (and not Miranda, Haskell's predecessor), checkout: [http://www.cs.kent.ac.uk/people/staff/dat/miranda/wadler87.p...](http://www.cs.kent.ac.uk/people/staff/dat/miranda/wadler87.pdf)

So IMHO, syntax helps if you want static type-safety, because the language and the type-system exposed need to be expressive. Whether static type-safety is useful or not, it's a matter of debate, being highly dependent on the problem domain. One could argue that static type-safety is very useful if the shape of the data you're manipulating is well defined and doesn't change much, otherwise you're better off with a dynamic language, but that's another discussion.

<comment><USER3> "People say that when a piece of Haskell code successfully compiles it is usually correct."

Every time I see this claim, I wonder what the heck people are working on that is so simple that getting the types right is all it takes to get the code right? Is it just that enough of my work is math or parsing, both of which typically have an infinite number of ways to get things wrong but with the correct types?

Or is the idea really the other way around -- if your program is sufficiently complex, you'll never get it to actually pass Haskell's type checks?

Edited to add, I love the article you linked to so far. :)

<comment><USER4> I had some similar experiences in OCaml recently, so I might be able to shed some light on this. I found that that when compiling code, the result was often one of three things: one, type checking failed (or I got an inexhaustive match warning), and I got a useful message, two, it worked, and three, it failed but the problem was fairly obvious when I saw it. Functional programming, for me, is a fairly direct way of expressing the algorithm in my head, so the basic idea tends to be much more fully fleshed out the first time I write it down in code.

Sometimes I got a type error from some bizzare syntax mistake, usually failing to correctly delineate an expression, and sometimes the algorithm in my head was just wrong and I had to fix it. At that point, the cycle starts over, and the same benefits I mentioned above help in debugging. FWIW, the problem I was working on was fairly simple, but novel. I was a very happy camper this Christmas, working with OCaml, despite its syntax.

Out of curiosity, what language do you do your "math and parsing" in? OCaml might be a good fit.

<comment><USER3> I do most of my $work programming in C++. (Not out of any great love for the language, mind you.)

To give a somewhat extreme example of the sort of stuff I do -- one of my current projects is to try to create a first-class fillet surface type [1] for the geometry engines I work with. My current code converts each fillet to a NURBS surface, but this is slow, consumes a lot of memory, and produces surfaces which frequently are not accurate enough for my purposes. So my hope is to be able to directly calculate points on the fillet and their derivatives.

It's easy enough to calculate points on the fillet surface, but I don't see any obvious way of directly calculating the derivative along the surface. So I've been investigating Chebyshev polynomials in two variables. But that algorithm looks a bit hairy, and I don't have any feel for whether it will be an actual improvement in practice. (And having written all this, I'm suddenly wondering if I'm making every effort to sort out the simple cases that are easy to solve exactly.)

My point here is that figuring out the correct types involved seems like a tiny, tiny part of the required work. Maybe it's because I haven't put in enough time in Haskell, but I don't see how stricter than C++ types are going to help. The real work is getting the math correct and fast enough to be useful.

By the way, my comment is not meant to be a dig at Haskell (et al). I'm not sold on it as a language, but it certainly has a lot of interesting ideas -- pattern matching and laziness spring to mind.

[1] [http://en.wikipedia.org/wiki/Fillet_(mechanics)](http://en.wikipedia.org/wiki/Fillet_\(mechanics\))

<comment><USER5> Often when using C++ I find myself solving C++ problems, not real problems. In a domain with very difficult math and performance challenges, the C++ problems will be dwarfed by the difficultly of the real problem you are solving.

For domains outside of physics and applied math, I think the dominating factor is often the inherent trickiness of writing correct procedural code vs. the ease of writing strongly typed functional code.

</comment></comment></comment></comment></comment></comment><comment><USER6> This is why everyone should study compilers and machine architecture in college.

Anyway, it's interesting that he chose to label what he ended up with as "Lisp". I would've stopped at assembly, eg. in LLVM IR:

      %result = icmp gt i8 %price, 100
      br i1 %result, label %Discount1, label %Discount2
      Discount1:
        ret i8 10
      Discount2:
        ret i8 5

The key idea here is that _underneath everything you tell the computer to do is boolean logic and transistor circuits_. Yes, even Lisp S-exprs; it's not really correct to say "Lisp has no syntax", it has a very simple syntax that is trivially parseable. Even LLVM assembly is a translation layer, as is LLVM itself; underneath it on my computer is an i86 processor, and underneath it in my phone is an ARM-architecture Snapdragon.

Once you understand that, you realize that all of these languages and frameworks and libraries and databases are just tools, and they exist for _your_ convenience. They're there to let computers handle things that humans are really bad at. For example, memorizing memory layouts really sucks; let a computer map out your structs onto memory. Managing heap memory really sucks; let a garbage collector do it. Managing register allocation really sucks; let a compiler do it. Managing syntax kind of sucks; let a parser slap something more friendly on top of it, or don't and use Lisp. Managing vtables kind of sucks; let C++ or Java hide it behind a class, or don't and continue to use C.

Once you've gotten into this mindset, you're free from the religious wars that surround technologies, because you realize it's all just tools that compile down to machine code at the end. And you understand when a tool might be useful, and when you could just as easily implement it yourself, and when it once was useful but has since ceased to be.

<comment><AUTHOR> That's one philosophy. Your code exists to be run by your computer.

Personally, I take a different one: the computer exists to run my code. LLVM, x86, ARM... all just implementation details. Sometimes they're unavoidable, but c'est la vie.

Ultimately, what I care about is _semantics_. I care about what my program means--the logic it represents. After all, that's the whole point, the end goal. The fact that it's running on a physical computer is just a detail, albeit an important one.

A programming language is more about shaping my thoughts and forming my logic than actually running. Choosing a programming language is incredibly important --it affects what I can say, how I can say it and even how I _think_. And that's the most important part.

<comment><USER7> The end goal of the web browser in which I'm typing this is not to represent some piece of abstract logic, but to drive the physical hardware: to change the color of pixels on my screen, to sense and react to my input. Attempt to distill it to some piece of logic or mathematics, and you end up with something useless, an absurdity.

The original task was "apply a seasonal rebate to our products," but none of the programs actually accomplished this feat. They contained some logic which might be useful in such a program, but none of them _applied_ anything. Logic on its own is sterile.

<comment><USER8> I thought the end goal is to display the page. I would say that "to change the color of pixels on my screen, to sense and react to my input" is a means to an end, not "the end goal".

<comment><USER9> This was a really neat discussion to watch. Devotional vs Observational semantics.

When I'm in my algorithms class and we have a code snippet to find a minimum spanning tree, we don't even have some machine to compile it down to, but because we have denoted some meaning to bit of the program, we can even prove that the meaning of the entire program is to output the MST.

</comment></comment></comment></comment></comment><comment><USER10> Now show the same tree for a ruby block, a Java inner class, a C# lambda and how they're all the same.

Except they're not.

Only the simplest ASTs are directly translatable. Language semantics differ wildly when you get into higher level constructs. Not even Lisp is able to help you, as that just changes the problem from one of syntactic representation into one of library implementation.

<comment><USER8> That's for syntax. Also, for semantics, how do you translate C's pointer arithmetic in Java?

<comment><USER11> All programming languages deal with pointers at some point or another, so it's just a matter of finding the GCD.

At least that's what I think this is about, and Lisp is a good GCD.

</comment></comment></comment><comment><USER12> Of course you don't care that much about which language to choose when you just want to do a simple if statement. However when you want to do more complex stuff, like answering a request on port 80 and compile a document that you send back over port 80, making sure to encrypt it properly so that no third party will get a hold of it, then it would be beneficial with some sort of programming language.

The question should really be, why does the IT department care if he uses C or Basic? And more over, why did he try to make it in C in the first place if he knows the IT department prefer Basic? This is a case of unprofessional behaviour by the author, not whether or not you need a language to express an if statement. At that point he could just as well have written this is x86. Who needs maintainability anyway?

</comment><comment><USER13> > Among other things, the C parser will look for curly braces, and the VB.NET > parser will look for the eye soring Then keyword.

Here I would pick up the article and write this:

No matter which language I start with, the end result is always the same. So maybe I could simply write out what is important for me:

      if price > 100
        10
      else
        5

And then I realized I was coding in CoffeeScript.

</comment><comment><USER14> Sure, and when you write an expression more complex than a single ternary, you start to see why Lisp is so uncommon in real-world usage.

It has a wonderful technical elegance, but the humans that have to write code tend to not think in the same sense. After four or five brace levels it gets very challenging to keep track of everything.

<comment><USER15> I think that can be said also of most mainstream languages, i.e., that more complex expressions are less comprehensible. The same applies to increasing levels of nesting. Lisp's syntax is so different that it just looks less comprehensible than any language you're more familiar with.

</comment></comment><comment><USER16> Well, you could edit machine code directly, or do the next best thing and write in assembler:

        cmp eax, 100
        jle LESSTHAN
        mv 10, edx
        ret
      LESSTHAN:
        mv 5, edx
        ret

I doubt that's what the author had in mind, though.

<comment><USER17> I'm surprised the author didn't write a shorter C example:

        return price > 100 ? 10 : 5;

<comment><USER18> That produces a different AST than the if/else because it's an expression. :)

<comment><USER19> Every LISP statement is an expression too. So if you were trying to match them, you'd use the ternary.

</comment></comment></comment></comment><comment><USER20> pg wrote about this years ago.

>If you understand how compilers work, what's really going on is not so much that Lisp has a strange syntax as that Lisp has no syntax. You write programs in the parse trees that get generated within the compiler when other languages are parsed.

source: [http://www.paulgraham.com/avg.html](http://www.paulgraham.com/avg.html)

<comment><USER21> It's as if lisp was originally designed to be an intermediate language for computer generated parse trees....and not a language for people to read.

<comment><USER19> It's not as if..it is truly the case. That's why only nutters use LISP for large projects. Who really wants to wrap every S-Expression in parenthesis? Talk about painstaking and what an eye-sore. If only M-Expressions caught on, LISP could be decent. But really, it's just making you write your program as a data structure because that makes it easier for the compiler to process.

So...

Ruby: good for developers, bad for the JIT compiler (slow)

LISP: awful for developers, good for the compiler -> machine (fast)

Is the tradeoff worth it? Not at all. Most LISP intros start by convincing you that you'll eventually get used to your code looking like a sack of parenthesis. No thanks, I shouldn't need to get used to staring at overburdened verbosity for the compilers' sake - build something better. Wait..we have other languages that are fast and look nice. And many even process into a well-formed AST. Okay, thank heavens.

<comment><USER22> I disagree that Lisp is awful for developers. To me and many others it looks quite pleasant while the "other languages that look nice" actually look like a needless mess of braces, brackets, asterisks, comma's, etc. etc.

Only Python comes close IMHO but has many other downsides.

<comment><USER19> Brackets, asterisks, and commas give array indexing, pointers, and the clean separation of function arguments.

(incf (elt vector 2)) ..versus.. ++vector[2]

which one is more readable?

LISP is not to be taken seriously. It's an academic curiosity, and cute, novel, not a language that needs continued zealots. It has no market share..the reasons are always going to be the same. The language is esoteric. I wouldn't program anything serious in JSON so why would I use LISP, where every semantic is a list..not even a hashmap.

[http://imgs.xkcd.com/comics/lisp_cycles.png](http://imgs.xkcd.com/comics/lisp_cycles.png)

"These are your fathers' parenthesis"

<comment><USER23> >(incf (elt vector 2)) ..versus.. ++vector[2]

One reason I like Lisp is that I don't have to think about operator precedence.

<comment><USER19> Math expression: a(8b^2+1)+4bc(4b^2+1)

In LISP: (+ (* a (1+ (* 8 b b))) (* 4 b c (1+ (* 4 b b))))

Oh, that silly operator precedence, lets just jam our heads in a vice while we unravel the nesting.

</comment></comment></comment></comment></comment></comment></comment><comment><USER24> Here's the code in either C or C#:

return ( (price > 100) ? 10 : 5);

Computer languages are for people. It should really be more like this:

        #
        # Description of what this does.
        #
        PRICE-THRESHOLD = 100
        LOWER-PRICE = 5
        UPPER-PRICE = 10

        IF PRICE > PRICE-THRESHOLD RETURN UPPER-PRICE
        ELSE RETURN LOWER-PRICE

Alternatively, use Excel:

        =IF( (price > 100), 10, 5 )

Excel is cryptic, but a lot of finance people understand it.

<comment><USER25> With C it can be more like what you want. Stop using ?: if you don't like it.

        if (price > 100)
            return 10;
        else
            return 5;

Replace with more named variables if you want.

<comment><USER26> I'm going to guess wildgift was being sarcastic. COBOL syntax is so needlessly verbose it interferes with the understanding of the actual formula. I contend that

        return price > 100 ? 10 : 5;

is way more readable.

</comment></comment></comment><comment><USER27> To quote Guy Steele, "All programming languages evolve until they become Lisp."

(iirc)

<comment><USER28> This is a fascinating quote. It seems to be a combination of either:

* Greenspun's 10th rule of programming: "Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of CommonLisp." [http://c2.com/cgi/wiki?GreenspunsTenthRuleOfProgramming](http://c2.com/cgi/wiki?GreenspunsTenthRuleOfProgramming)

* James Gosling quoting Guy Steele: "Lisp is a Black Hole: if you try to design something that's not Lisp, but like Lisp, you'll find that the gravitational forces on the design will suck it into the Black Hole, and it will become Lisp". [http://web.archive.org/web/20091201072950/http://blogs.sun.c...](http://web.archive.org/web/20091201072950/http://blogs.sun.com/jag/entry/the_black_hole_theory_of)

</comment></comment><comment><USER29> For simple business rules and logic, I found it useful to just use a table or mini-spreadsheet to represent them. It has strict structure and it's simple to understand and fill in. Business users love them.

</comment><comment><USER30> We've been working on a programming language that is based on composition. This basically leads to a hybrid data structure (not necessarily tree- structured).

Here is an example (write out 1 2 4 8 16 32 on different lines):

       Application (
         using Library ( name "Vision.Console" )
         action ForEach (
           items 1 2 4 8 16 32
           action WriteLine ( text CurrentItem () )
         )
       )

Parts are upper case and properties are lower case. Each Part is a class 1 contained within a given framework.

</comment><comment><USER31> I'm working on a toy programming language at the moment, and I was considering using a LISP dialect of some sort as the IR to be compiled down to. Is this a dumb idea? I had the same sort of epiphany that the OP had, but then I think LLVM IR is a better choice. The only reason I like the LISP-as-IR idea, is that if a programmer wants to get deep and optimise, the tooling can work with lisp instead, which allows for some neat tricks I have in mind.

<comment><USER32> You're basically reontologizing the history of Lisp, which is that it was originally S-expressions that were the intermediary language for M-expressions, which were the human representation.

They never quite got around to making M-expressions though, people found working in S-expressions to be pretty fine.

Dylan is sort of a compromise around this area though:

[http://en.wikipedia.org/wiki/Dylan_(programming_language)#Sy...](http://en.wikipedia.org/wiki/Dylan_\(programming_language\)#Syntax)

</comment></comment><comment><USER33> Someone influential (was it Joel) said that code gets read a lot more often than it gets written.

I am not used to Lisp or VB.net but I do find the first two examples a lot more readable.

(Seasoned Lispers, does reading Lisp get easier to read over time? As readable as an imperative language?)

<comment><USER19> It's a sack of parenthesis anyway you slice it. Of course staring at anything, including parenthesis, gets easier the more often you torture yourself. Just like talking with a lisp, you get used to it...hence they call the language LISP; painfully charming.

</comment></comment><comment><USER34> The overly eager optimizer in me was thinking:

        (price > 100) * 5 + 5;

yay! no branching!

<comment><USER35> (((price - 100) / abs(price - 100)) * 25 + 75) / 10

Here you go, simple integer math, no programming necessary :) That said, this isn't optimisation, multiplication and division aren't intrinsically better than branching.

<comment><USER34> x/abs(x) is really sign, which is something you can implement using bitwise oprations.

Your solution fails when price == 100 as sibling pointed out.

</comment></comment></comment><comment><USER36> No one thinking that a contractor might have to maintain it in 5 years time? No?

Ahhh _the fundamentals_!

<comment><USER37> My exact thought. Moreover, there might be other architectural reasons why he was asked to implement the logic at the higher level. I can see what he is getting at, but not his motives.

</comment></comment><comment><USER38> Nice way to discover the _if_ special form. Now its time for short- circuiting.)

</comment><comment><USER39> Alright, that's one anecdote. But take a look at this one.

In Python:

a = 3 * 4 + 5

In Lisp:

(setf a (+ 5 (* 3 4)))

Now maybe it's just me, but balancing all those parentheses and thinking in prefix notation gets a little hairy, especially if we introduce more math into a program (think graphics or ML).

<comment><USER40>
        3   7
        - + -
        4   8

Can't write that in Python. Looks like Python does not support even basic math notation.

Lisp does not even attempt to do that.

We have to write

        (+ (/ 3 4)
           (/ 7 8))

or

        (+ 3/7 7/8)

Let's say we want to write a slightly more complicated expression in Python:

                   2 2 +-+    3+-+3+</comment></comment><comment>-+2   3+-+2 3+</comment><comment>-+
               - 2b x \|3 log(\|a \|b x + a   + \|a   \|b x + a + a)
             +
                 2 2 +-+    3+-+2 3+</comment><comment>-+
               4b x \|3 log(\|a   \|b x + a - a)
             +
                          +-+3+-+2 3+</comment><comment>-+    +-+
                2 2     2\|3 \|a   \|b x + a + a\|3                  +-+3+-+3+</comment><comment>-+2
             12b x atan(</comment><comment></comment><comment></comment><comment></comment><comment>----) + (12b x - 9a)\|3 \|a \|b x + a
                                     3a
          /
                2 2 +-+3+-+
             18a x \|3 \|a

Not possible. It does not know basic math format for roots, exponents, ... Lisp also does not know it.

Balancing parentheses in Lisp is usually done with the help of an editor...

<comment><USER39> For the first part, it's still more intuitive (at least for me personally) to write

a = 3/4 + 5/8

than

(setf a (+ (/ 3 4) (/ 7 8)))

and the primary problem that I have with the parentheses not closing them, but logically seeing how expressions link together. Even if you can click on an end paren and see the expression it closes off (as you can in most IDEs) it would be easier just to not have the extra parentheses there in the first place, so as to avoid the confusion.

It's really hard for me to even tell what you're trying to write for the second part -- in Python or Lisp.

<comment><USER40>
        (setf a (+ (/ 3 4) (/ 7 8)))

I have no problem writing or reading that.

Personally I like the parentheses a lot, since they allow me comfortable editing operations for such expressions. Additionally it makes it easy to computationally manipulate those expressions as data.

</comment></comment></comment><comment><USER41> If you expressing what you want the computer to do, and it understands you, you are - by definition - using a language.

</comment><comment><USER42> Oh man, so many people in the world need a better boss...

Without him, they will spend most of their lives on mindless debates sucking their creative energy like a vampire blood.</comment>


New Zealand schools get the license to Chrome - <AUTHOR> https://www.blog.google/outreach-initiatives/education/all-kiwi-schools-get-license-chrome/ <comment><AUTHOR> > Starting on November 1, as part of an agreement with Google and the New > Zealand Ministry of Education, all state and state-integrated schools across > New Zealand will be able to start claiming Ministry-funded Chrome Education > licenses to manage new and existing unmanaged Chromebooks.</comment>


Michael Stonebraker: Why Enterprises Are Uninterested in NoSQL? - <AUTHOR> http://cacm.acm.org/blogs/blog-cacm/99512-why-enterprises-are-uninterested-in-nosql/fulltext <comment><USER2> Trivial example of what people need to know in enterprises:

 _"Tell me whether pet rocks are selling better than Barbie dolls in the south?"_

What people really need to know:

I already know from existing reporting that 984 orders (18% of our backlog) are already past due. For those 984 orders:

      - How many are for one item and how many are for multiples?
      - Do we own what we owe those customers?
      - If we do own it, is it in the proper warehouse?
      - If it is in the proper warehouse, can we find it?
      - If we can find it, is it undamaged and certified?
      - If it's shippable, do we have enough labor to ship it?
      - If it isn't certified, how soon can QA certify it?
      - If it isn't in the right warehouse, can we move it?
      - If we don't own any, where can we get some?
      - Which vendors have it on the shelf?
      - Which vendors do we have blanket purchase orders with?
      - Which vendors do we have contracts with?
      - Which orders can be split to satisfy a partial?
      - Which orders are for customers already on credit hold?
      - Which customers are threatening not to renew with us?

      and (ironically) the most asked question of all:

      - Which orders must be shipped to hit our quarterly numbers?

I can go on and on; this is just off the top of my head. We like to pick on enterprises, but this is the shit that really happens all the time. So whenever you get gas in your car, bread on your table, new shoes at the mall, steamed milk in your latte, etc., etc., etc., rest assured that _someone_ , _somewhere_ has asked these questions. Questions that were probably answered using some form of RDBMS, SQL, ACID technology (with really good application software on top of it).

<comment><USER3> SQL is actually quite often a bad way to try to answer those questions, too! See <http://philip.greenspun.com/wtr/data-warehousing.html> for an entertaining explanation.

I believe MongoDB in particular can be a fairly good solution to build datawarehouses (I'm starting to use it for reporting systems).

One great point about MongoDB is that it makes the ETL process a lot easier (you don't have to prepare tables with the right schema and it supports large amounts of data).

I wouldn't be surprised to see some NoSQL solutions get wider adoption in the enterprise, either alone or with tools that build upon them.

As for the article: it's pure linkbait in my opinion!

<comment><USER4> I used to be a Business Intelligence consultant for enterprises. We built reports, data warehouses, dashboards, etc. From my experience, the article is spot on, not linkbait.

Maybe MongoDB is better once you have a well defined query that you need, but I think the point of the parent comment is that those examples of queries are ad-hoc. NoSQL is not as good as SQL when it comes to report specs that are constantly in a state of flux.

I need my data available to answer questions. When building a product you have a well defined set of operations based on the features of your product. When the requirements shift on a regular basis, NoSQL is too limiting.

When the article talks about a low level query language being too limiting, they are talking about missing things like CONNECT BY PRIOR or SUM(CASE IF col IN ('a','b','c') THEN 1 ELSE 0). These are the same kinds of things that are difficult to do with an ORM.

<comment><USER5> Both of those queries are very easy to perform in MongoDB.

For examples of how to easily model and query trees (CONNECT BY PRIOR in SQL) see: <http://www.mongodb.org/display/DOCS/Trees+in+MongoDB>

SUM(CASE IF col IN ('a','b','c') THEN 1 ELSE 0) can be implemented as a group or mapreduce query.

I would say that you have a lot more power and flexibility in MongoDB compared to an average SQL database when it comes to ad-hoc querying.

<comment><USER4> I am not a MongoDB expert by any stretch, so please correct me where I am wrong.

The way I read your link it sounds like I need to store the data in a particular way in order to run a parent/child query. That is great if I know that I need that query at design time. What happens if I have tens of millions of records and need to run that report on an ad-hoc basis? Where the relationship may or may not be important?

What if I want to sum the "cost of goods sold" one day and the "items per transaction" the next? Does that not require someone to write code more complex than SQL? Because on Oracle a business analyst can open up Toad and run that query.

If I am wrong then it very well may be that the problem is one of the enterprise not being aware.

<comment><USER5> Ease of use is subjective. I dont think writing a mapreduce job needs to be more complex than writing an equivalent SQL query. What really matters is elegance, flexibility and power.

My personal experince is that the MongoDB model seems to win in most cases. Especially when it comes to flexibility and ad-hoc querying. Having a real language (javascript) and a flexible schema tend to make most business problems easier to express.

<comment><USER6> _Ease of use is subjective. I dont think writing a mapreduce job needs to be more complex than writing an equivalent SQL query. What really matters is elegance, flexibility and power._

Unfortunately it seems you have completely misunderstood the nature of both SQL and MapReduce. MapReduce is a distributed computation engine. While it can be used in that way it was never meant to be a database system. BigTable is proof enough of that.

In general, SQL is the syntactical representation of relational algebra with some hacky additions for programmer convenience. Comparing just "SQL" to the MongoDB language model is misguided since you then break down to a question of algebraic expressivity and relational power.

I'm not going to try and build a proof here but we do know that a formal relational algebra system is equivalent to first-order logic. As far as MongoDB's relational language goes, one would probably have to make an argument that it is equivalent to either tuple or domain relational calculus, but I know of no theoretical work that has attempted this. If anyone has any more information to the theoretical expressiveness of the MongoDB relational system I would love to read it.

<comment><USER5> I was not arguing about relational algebra or theoretical expressivity or logical equivalence or anything like that. I was simply stating that in practice most business problems are easier to model and more flexible to query in the MongoDB model.

Of course you need some time get used to thinking in terms of documents rather than tables and rows. But once you get used to the idea you can easily model most domains that occur in practice.

> MapReduce is a distributed computation engine. While it can be used in that > way it was never meant to be a database system. BigTable is proof enough of > that.

Yes, MapReduce in the Google and Hadoop sense is designed for massive batch processing. That's why BigTable and HBase exists. MapReduce in the CouchDB and MongoDB sense is a Turing complete query and processing layer built on top of a column store. In the CouchDB case MapReduce is the _only_ way you can query the database.

<http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views> <http://www.mongodb.org/display/DOCS/MapReduce> [http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-...](http://www.mongodb.org/display/DOCS/Aggregation#Aggregation- Group)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> Many years back before this NoSQL madness took off, I was building my own "NoSQL" database. It was fast, refreshing and it seemed like common sense. Then as I was adding more and more features, I realized my neat "NoSQL" (I didn't call it this though) database is turning into relational one. I've come full circle back to relational stores. Only then I fully understood why relational aspect is mathematically superior to any other paradigm out there and why it's only SQL that really sucks. Perhaps this will happen again to mainstream NoSQL movement. It certainly wouldn't surprise me.

So instead of making surveys why enterprises don't jump on NoSQL bandwagon, I would be more interested to know how many of NoSQL adopters ever heard of Codd's theorem or how many of them can differentiate between SQL and relational model. Relational model is a good thing, throwing it out and start from scratch feels like throwing out the baby with the bathwater. That's how I feel about NoSQL movement.

</comment><comment><USER8> In short: 1) No ACID Equals No Interest 2) A Low-Level Query Language is Death, and 3) NoSQL Means No Standards. ACID, complex querying, and standards matters when dealing with something more than a string dealing with what someone had for lunch.

But while Stonebraker is convincing and very credible, can his message really compare with these talking heads? <http://www.xtranormal.com/watch/6995033/>

</comment><comment><USER9> I think a lot of the comments here (not all) display a relative naivete about what is meant by ACID and why the physical / logical separation of SQL is vital to the point about ad hoc queries.

It's ironic because some of those comments complain about enterprise types not knowing about NoSQL while, at the same time, the comment makers seem to not (really) know about SQL RDBMS systems.

<comment><USER10> I, too, have found this to be the general case.

I speculate that this is because they consider MySQL to be the archetype RDBMS. I have yet to run into such depth of misconception from those who work with Postgres.

</comment></comment><comment><USER11> Before relational databases and SQL, there was a successful industry of hierarchical databases (key-value stores), which was so utterly annihilated that not one vendor remained to give testament.

RDB has since become standard. One aspect of a "standard" is uniform interfaces or one-size-fits-all, an essential aspect of which is that it doesn't suit all needs perfectly. It's a modular approach, that involves adapting non-quite circular circles and non-quite triangular triangles to perfectly square slots. You see it in mathematics and (eg) OO polymorphism all the time. It's an unpleasant but often worthwhile tradeoff.

But at the edges, that tradeoff becomes questionable. And the web's REST is a new giant, whose clothing needs a different shape altogether. Applying RDB to it is so ill-fitting and irritating and obviously wrong that hierarchical databases have found a new home and a new life and a new name, NoSQL.

But when NoSQL attempts to spread to others, it is surprised and hurt to find them already tailored for.

\---

The above fable is light on detail. There are many complex issues in the NoSQL/RDB comparison, since both have adapted to the detailed problems of their respective domains. However, I think the key aspect is that RDB is meticulously thought out in terms of _information_ , and only then adapted to specific engineering needs. Specifically, it has normal forms and schema (needed for normal forms.)

</comment><comment><USER12> NoSQL has technical merits, but it seems to me like a good chunk of the interest in it is driven by distaste for SQL and the complexity of RDB systems in general. There are a lot of programmers out there who shudder at the thought of delving below the ORM, much less writing a stored procedure.

Big companies may be many things, but one thing they are not is afraid of RDBMs. Enterprises are filled with the kind of people who dedicate their lives to learning every in and out of Oracle or DB2. Not to mention that these are the people traditional RDBMs products are designed for. They just don't have the same pain points as startups.

</comment><comment><USER13> I'm not an enterprise guy at all, but here's another thing worth considering: if even I, web 2.0 dude, am a bit confused by the array of things out there, and think that waiting until they battle it out and only a few are left at the top might not be a bad strategy, what is some corporate IT guy going to think?

</comment><comment><USER14> The disclosure at the bottom is laughable. It should read, "Michael Stonebraker has a strong economic incentive to steer enterprises away from NoSQL. Whenever a company chooses NoSQL, he will lose money. Hence, his opinions should be considered in this light." Oh, and full disclosure, I have a strong economic interest in promoting NoSQL.

<comment><USER15> Not sure why this is being downmodded. Stonebraker has a history of using his reputation to promote his businesses. Which is fine, but I don't think most people realize how much of a financial interest he has in downplaying nosql. Something his competitors like ahoff and I are very much aware of. :)

<comment><USER13> It's a bit over the top: "Whenever a company chooses NoSQL, he will lose money." - it's not like Stonebraker gets money every time someone sets up Mysql, or even Postgresql, which, IIRC, he was involved with at some early point in its history.

</comment></comment></comment><comment><USER16> Is there a company with a NoSQL product that is selling support contracts and is listed with Dun & Bradstreet? What do the reports from Gartner and Forrester Research say? Can I sue someone if something goes wrong. Did the options get evaluated with the corporate IT database committee?

The sad part is that is how it works in a lot of companies and not just a bunch of snark. Since SQL is so entrenched and most IT shops have contractual relations with SQL vendors with lots of money (Microsoft and Oracle), I don't see a lot of ability to get NoSQL into the enterprise environment. Not to mention the legacy software that means SQL Databases are needed, so why add a whole new type?

<comment><USER17> My company CouchOne offers commercial support for CouchDB (which consequently has quite a bit of enterprise uptake, contrary to Stonebraker's assertions).

I think there is something to the argument that without commercial support, companies won't be adopting these technologies.

<comment><USER18> I try to look at the bigger picture think how can companies like yours help companies like mine starting up so we can tear down the entrenched SQL forces.

<comment><USER13> > tear down the entrenched SQL forces.

Sounds like a terrible idea to me. What you should be doing is building new things where SQL is not such a good solution, rather than "tearing things down".

</comment></comment></comment></comment><comment><USER19> I dont think it is about the technology at all. It is more about social factors. Enterprises often shy away from being on the leading edge of anything. There is very limited upside and big downside. I'm willing to bet that once the NoSQL space shakes down with some big winners, some defacto standards, enterprises will be adopting it just the same.

Enterprises also need to be _sold_ to. I don't see any startup having a sales team pushing NoSQL solutions inside the enterprise (Amazon's SimpleDB and my own team's Windows Azure Tables might be exceptions).

<comment><USER20> <http://cloudera.com> <http://riptano.com> <http://couchone.com> <http://10gen.com> <http://neotechnology.com> <http://basho.com> ...

<comment><USER19> None of them are 'large' enterprise companies - think Oracle, MSFT, IBM, etc.

</comment></comment></comment><comment><USER21> The disappointing aspect isn't that they aren't interested in it, it's that they don't know about it.

At the end of the day, there are a lot of trendy technologies that I have no use for. But its good to know about them. I probably have about equal use for NoSql as I do SQL (the first professional code I ever wrote was a NoSql database, although we didn't call it that back then).

You choose what's best for the job, but in order to know what's best you have to know what's out there.

<comment><USER13> To play devil's advocate, aren't a lot of these places where it's best not to rock the boat and risk screwups? In other words, they'll learn about new things in good time once they have big companies advertising them and have been around the block once or twice.

Whether that's sensible or not, I'm not in a position to judge, just that in that sort of world, perhaps learning about things a bit late is not a problem.

<comment><USER21> True enough. And in hindsight, I think asking people if they've heard of "NoSql" is somewhat an unfair question. The term itself is s trendy one. I'm sure there are probably people who have fixed more lines of code in NoSql databases than most people have here have written, and don't know that specific term.

<comment><USER22> Disagree. It's everywhere in tech news sources. If you read any tech news on a regular basis you can't possibly be unaware. Part of being a professional is keeping on top of new products/solutions in the field, even if they aren't immediately useful.

</comment></comment></comment></comment><comment><USER23> Hierarchical OLAP databases applications are pretty widely used in enterprises and they often look _nothing_ like an SQL database to users (sure something like Oracle Hyperion may have a relational database buried under there somewhere but the exposed data model sure isn't relational and things like Essbase are pretty similar but don't have any underlying SQL).

</comment><comment><USER24> Another big reason: money is not an issue. You want to create ten interconnected tables w/ a bajillion records each, then query across them needlessly every microsecond? No problem, with enough money and hardware there are ways to make almost anything happen using commercial SQL databases.

<comment><USER25> Your statement reminds me of this quote "A boat is a hole in the water which you throw money into."

This is the general point of view executive committees have of IT. A necessary cost to keep them afloat in the sea of business.

So as much as money is not an issue the bottom line at most enterprises is money. If you figure out how to greatly reduce the overall costs IT, or in this case data storage, the enterprise company you work for will probably appreciate it.

</comment></comment><comment><USER26> It's a funny thing.

Very powerful and scalable parallel SQL-based RDBMS systems have been commercially available for a long time. Also, I think that scalability concerns about ACID are exaggerated: ACID doesn't reach Facebook or Amazon scale, but there's only 5,000 or so sites that are that big.

A converse question to the one they ask is, "Why aren't web developers interested in Commercial Parallel RDBMS" and I think the answer to that is that there are a generation of us who grew up using open source databases, who find the thought of using a commercial database like sticking their hand in a toilet... Even if it's a reasonably priced product like SQL Server's Web Edition.

A lot of people see mysql and pgsql as going nowhere, so there's a lot of interest in something like mongodb which has a future.

<comment><USER13> > pgsql as going nowhere

Eh?! They just released a major update with long-awaited functionality!

<comment><USER27> Did the new functionality include reliable replication?

<comment><USER20> Actually, yes: [http://developer.postgresql.org/pgdocs/postgres/release-9-0....](http://developer.postgresql.org/pgdocs/postgres/release-9-0.html)

<comment><USER27> Awesome. Was an honest question, don't do a lot of mysql or postgres these days.

<comment><USER27> Geez, touchy subject I guess.

</comment></comment></comment></comment></comment></comment><comment><USER28> The title isn't a question, it's a statement.

I'm pretty sure Mr. Stonebraker's English is better than that.

</comment><comment><USER29> We are looking in to using Node.js/Redis/Socket.io to track changes to useful profile data across all of our intranet applications in real-time. No change to the current ACID setup; just hooks at the client-end. No need to persist; speed and efficiency is top priority. No extra hardware; just an extra load on our content servers.

And though we are probably in the minority we are Enterprise nonetheless.

</comment><comment><USER30> Say what you will about SQL databases and I'll probably agree with you. However, larger organizations have to think at a much larger scale than the typical startup does. Migrating from a SQL database to a NoSQL database is a _much_ more difficult decision to make once you reach a few hundred thousand lines of code, much less millions.

And I haven't even gotten into the logistical issues yet. Do we have server capacity for the new database? Do we have people who know how to administer the new database? Can I install it in under a month on our server running <insert outdated version of RHEL here>? And these questions become doubly important if your clients are running your software on their own servers. Now not only are these logistical issues, they're excuses for your clients to drop you and go with someone else.

To make a long story short, if NoSQL databases are worth it, enterprises will get there. But it's going to take a while. Much as us engineers hate to admit it, that might even be a good thing.

<comment><USER25> In terms of the adoption of NoSQL databases (or any dev technology) within your enterprise, write a small and useful app as a side project in your spare time. Once you're done present it to your manager (or team lead) and I'm sure it'll increase its chance of it becoming more widely used within said company.

</comment></comment><comment><USER31> The most disappointing thing about this post is the fact that we're supposed to be preaching "use the best tool for the job" to the young ones. And here is someone that anyone interested in database technologies has heard about and is regarded as an expert denouncing a whole slew of potential database solutions based on the opinion of one person.

And ACM publishes it!

<comment><USER32> On the contrary the post explicitly goes into the reasons why current nosql solutions may not be appropriate for enterprise oltp systems. Seems to me that the post didn't say nosql solutions are bad for all enterprise apps just that rdbmses may be the better solution for the bulk of them. So that's not an argument to choose the right tool for the right job? I think it is...

</comment></comment><comment><USER33> Stonebraker makes a point of saying that the lack of standards in NoSQL system prevents their adoption. While there are standards surrounding SQL most SQL databases do not adhere to the standards. They have connection semantics and syntax that are at times mutually exclusive. Drupal 7 has a dynamic query builder specifically to take care of this (see this podcast for more info [http://www.lullabot.com/podcasts/drupal-voices-24-larry- garf...](http://www.lullabot.com/podcasts/drupal-voices-24-larry-garfield-new- database-layer-drupal-7)). But for most organizations, it's not like they can simply switch from one database system to another without a fair amount of work.

</comment><comment><USER34> It seems to me that there are two or three things being conflated here under the "NoSQL" moniker, and Stonebraker isn't helping things.

First, there's the standard relational storage model. We've known for almost 40 years that some kinds of queries are a lot faster if you denormalize so you're not even in 1NF. Occasionally this matters. "Document stores" are a lot better suited to things that aren't in 1NF than relational databases. In theory you could maybe make this problem go away by throwing more hardware at the problem, so that the extra factor of lg N (which might be around 20 or so) goes away.

Second, there's SQL and all of the hassles it comes with, which can be largely papered over by things like SQLAlchemy and Django and the like, but there are still tricky issues like schema migration and incremental rollout.

Third, there's the CAP theorem. ACID requires consistency (the C in ACID and the C in CAP are the same), so you give up either availability or partitionability, and when you give up partitionability you're usually giving up parallelizability as well, which can put a crimp in the "throw hardware at the problem" approach.

It's true that the costs of abandoning standard SQL databases are high. But there are things you can't get any other way. If you need a million queries per second per database server (serving up variable-length lists of structured data), if you need to be able to incrementally roll out a new database schema across your site, or if you need to tolerate network partitions (and latency; a partitioned network is just the limiting case of high latency) without your database becoming unavailable, standard SQL databases aren't going to give you what you need, as far as I know.

As far as I can tell, these are the three sources of "NoSQL": rejecting the relational model as a way to organize on-disk storage, rejecting the SQL DDL as a way to manage change, and rejecting ACID transactions. Interestingly, none of these necessarily implies rejecting SQL as a user-interface language, and indeed FQL is an SQL user interface on top of some very non-SQL-ish systems.

(SQL itself is a terrible language, as Stonebraker will no doubt tell you if you ask, but it's not so terrible as to justify the switching costs.)

</comment><comment><USER22> The entire premise is wrong because there is nothing to compare the survey data to.

"44% of enterprise users questioned had never heard of NoSQL and an additional 17% had no interest. So why are 61% of enterprise users either ignorant about or uninterested in NoSQL?"

Is 61% high or low compared non-enterprise users? Maybe 61% of all users are either ignorant or uninterested.

Unrelated, if you're in IT and are unaware of NoSQL databases you kind of suck at your job. Not saying you have to use them, but you should at least know they exist when the tech news is saturated with them.

</comment><comment><USER35> About the proliferation of NoSQL, check out this Changelog episode where "things got a bit rowdy when the panel debated features of Cassandra, CouchDB, MongoDB and Amazon SimpleDB and started throwing dirt at everybody else's favorite NoSQL databases." [http://thechangelog.com/post/457259567/episode-0-1-8-nosql-s...](http://thechangelog.com/post/457259567/episode-0-1-8-nosql- smackdown)

This is 6 months old btw.

</comment><comment><USER36> Correct me if I'm wrong. I thought some of the "enterprises" have already using NoSQL as part of their data warehousing strategy?

To my knowledge (which might be wrong), there are companies out there such as Greenplum, Teradata, Netteza, Oracle Exadata that specialize in data- warehousing solution, have built their own DBMS based on column-oriented.

<comment><USER37> Column or row-oriented really has nothing to do NoSQL or not. I'd argue NoSQL is a bad name, and as pointed out by previous commenters, many that are involved in the argument don't even understand ACID/SQL/relational algebra.

</comment></comment><comment><USER38> The simple reason for all this mess is the fact that most enterprise companies have spent a lot of money on their Oracle/Sybase/Whatever licenses and hardware and want to see a long term return on their capital.

</comment><comment><USER39> Reason #3 is a good one. In Perl i'd make DBDs for all the NoSQL solutions I had to use and tell my devs to use that, but what else could we do that'd be more language-independent?

</comment><comment><USER40> Not true, they are just aren't doing "NoSQL" specifically: <http://www.sap.com/press.epx?pressid=13293>

</comment><comment><USER41> Didn't NoSQL start in enterprise? Facebook used Cassandra, Google used BigTable, Amazon had Dynamo, etc?

</comment><comment><USER42> Because NoSQL systems are a tool, enterprises have invested heavily in workforces and capital that are centered around SQL. It's relatively easy as an enterprise dev to get a SQL database that is going to be backed up and restored by their admins. It's ok to lose the odd 'Like' it's not ok to lose the odd deposit.

Since enterprise businesses are generally not built on a freemium/advertising model, they have the resources to buy systems that are accurate first, and then furnish hardware to provide the speed.

Another problem with NoSQL is that while the core database functionality is there, the rest of the tool chain is missing. Show me a NoSQL database that has tools on par with SQL Server management server, or has tools that integrate well with Visual Studio.

Simply put, the use-case for NoSQL is not what enterprises need. SQL fits the use case far more than NoSQL. Keep in mind that a lot of large enterprise applications still run on mainframes. If you actually think about it, most mainframe applications are NoSQL because they are still using datastores so ancient and basic that they are essentially NoSQL.

<comment><USER43> I'm not sure I agree with the definitions of enterprise being implied in the comments here.

I'm at a giant company all of you have heard of and we have the sql server visual studio enterprisey people that the article mentions, and they fit the articles description to a T. I also work directly on analytics for our company, and good friend of mine does analytics for another giant corporation nearby that all of you have also heard of.

I believe our companies would be considered "enterprise", yet neither of us work at banks, neither of us work with ecommerce or supply chains for physical commodities, and neither of us are at tech companies. We both have groups heavily invested in sql, yet it is the wrong solution for both of us. Our enterprisey people had never heard of NOSQL or things like hadoop. Fortunately we're coming around and are starting to move things to hadoop, but the article matches my personal experience, and ACID is a requirement for the analytics we do. Our analytics are fuzzy by nature, yet we've been stuck in the sql enterprise mindset for years.

</comment></comment><comment><USER44> 0\. Because mediocre enterprise programmers can't manage complexity.

0.5. Because you can point fingers to Oracle when it crashes.

0.9. Because "No one was fired for choosing IBM".

</comment><comment><USER45> Without reading the article, I can sum this up in two words: perceived efficiency.

</comment><comment><USER46> Please don't use double negatives... shouldn't this read "Why Enterprises are Interested in SQL". (And it's a statement not a question).</snark>

</comment><comment><USER47> There's a positive review if I've ever heard it: "Enterprise thinks it sucks".

If I live a dozen lifetimes, I hope to never write another line of "enterprise" code again.</comment>


Is HTTPS required for local network server to server communication - chupa-chups https://security.stackexchange.com/questions/227020/is-https-required-for-local-network-server-to-server-communication <comment><AUTHOR> The factor missed in that post as a con to https is that it can be a bitch to debug. With http you sometimes can pinpoint the issue by just running tcpdump (which btw happened last week at my work). When a major incident is ongoing, every minute counts and fighting with https can significantly slow engineers down.</comment>


Clint, Command Line Library for Python - <AUTHOR> http://www.nicosphere.net/clint-command-line-library-for-python/

<comment><USER2> Something about the colored.red(txt) syntax bothers me.

Shouldn't color should really be a parameter - unless the console only accepts a fixed set of colors?

I like the rest of it - using a 'with' block for indentation is clever.

<comment><USER3> Well, there's nothing wrong with providing a shortcut, although personally I would have preferred a closure:

        printred = colored.print_function("red")
        printred("This prints in red")

<comment><USER4> Wouldn't this work? I can't test it at the moment.

        print_function = lambda c:  getattr(colored, c)
        printred = colored.print_function("red")
        printred("This prints in red")

</comment></comment></comment><comment><USER5> Just released for Python 3 as well.</comment>


First stable version of Scheme web framework Artanis released - <AUTHOR> http://lists.gnu.org/archive/html/artanis/2018-03/msg00000.html <comment><USER2> Nice work. Having written a few WAFs for unpopular languages, I think it's most compelling to also include a more stable/mature backend like FastCGI in addition to the self-rolled socket driver -- similar to how Flask has the dev server and WSGI backend support. If your socket driver (and HTTP parser) ends up being more performant and stable, that's awesome. But it's probably unlikely and definitely a harder sell.

FastCGI in particular has the benefit of being incredibly simple to wrap. Here [0] are some rudimentary bindings I wrote for Chicken Scheme.

[0] [https://github.com/eatonphil/pine](https://github.com/eatonphil/pine)

<comment><USER3> Definitely second your recommendation on FastCGI: it's very straightforward, and it's simple for people to deploy.

</comment></comment><comment><USER4> If you didn't know already, "Artanis" is "Sinatra" backwards. It is similar to frameworks such as Ruby Sinatra, Python Flask and Java Spark.

Also the main dev, "Nala Ginrut" is "Alan Turing" backwards, sorta.

<comment><USER5> I just noticed that. I thought they named it after the Protoss character from _StarCraft_.

<comment><USER6> Nostalgia kicks in and memories of playing StarCraft on Dial-Up return... I miss how simple the web was back then... AOL, MSN, not even Google was mainstream yet I don't think haha

Also for those wondering:

[http://starcraft.wikia.com/wiki/Artanis](http://starcraft.wikia.com/wiki/Artanis)

<comment><USER7> The AOL dream is sorta realized... AIM is now Facebook Messenger, AOL emphasized keyword search over addresses just like how people just Google everything... maybe that's all actually...

</comment></comment></comment></comment><comment><USER8> "Sailing to /dev/null

That is no future for mediocre coder.

The hacker is one another's arm. Codes in the editors.

Those dying generations - at their song."

That's what the project page says. Anyone know what it means?

<comment><USER9> That sounds like [https://en.wikipedia.org/wiki/Sailing_to_Byzantium](https://en.wikipedia.org/wiki/Sailing_to_Byzantium)

</comment></comment><comment><USER7> Extremely cool. Can't wait to write something in this! Why is the configuration[1] done in an ad-hoc language instead of Guile?

[1]: [http://www.gnu.org/software/artanis/manual/manual.html#org96...](http://www.gnu.org/software/artanis/manual/manual.html#org9698308)

</comment><comment><USER10> I tried Artanis about a year ago - very cool, but I only played with it, never deployed anything. It is an impressive amount of work done by one person and the documentation is very adequate.

<comment><USER4> I should have another go at contributing to the documentation in my copious spare time. The lead dev seems like a really nice, enthusiastic guy.

<comment><USER10> Cool! Thanks for your efforts. I also enjoy the lead dev's online persona.

</comment></comment></comment><comment><USER11> Think Permissions. Authentication backends. For the world, as it is. Built it into the thing right form the beginning. Always.

There is no future for mediocre frameworks that do not come with what is most hard to get right - knowing who to let in and what to allow them - that is the most important hackers work - to collect that knowledge in devoted collaboration is the noble generations teaching.

The work that does not make the reasoning on locks and keys its cornerstone looks hollow, inchoate, empty. No need for just another lightweight paper castle, no matter how magic your language speaks - it needs to fill the needs of a warriors world, full of dark and evil souls, so better you draft with shelter always on your mind.

</comment><comment><USER12> "scheme web framework", except there are multiple scheme implementations _and_ variants. I don't understand why the word scheme is even used, each scheme is basically a silo.

<comment><USER2> Unless Artanis uses FFI calls (which are not part of any SRFI I recall) it is quite reasonable to implement an entire WAF using standard Scheme + SRFIs (for instance, there's an SRFI for socket IO). Build steps always differ but it isn't necessarily difficult to avoid using implementation-specific functionality.

For a non-trivial example, check out the R7RS benchmark suite [0]. 10 of the 30 implementations there complete 95%+ of the benchmarks. (10 is a lot of options...) Racket is probably the most intentionally divergent from Scheme and it still manages to provide an R7RS front-end making it one of only 5 Schemes to finish 100% of the benchmarks (and be pretty fast).

[0] [https://github.com/ecraven/r7rs- benchmarks](https://github.com/ecraven/r7rs-benchmarks)</comment></comment>


Show HN: Teddy – A physical pet made possible using Estimote beacons - <AUTHOR> https://github.com/paramaggarwal/teddy

<comment><USER2> Coming soon, the Internet-enabled Elf on the Shelf. In stores for Xmas!

 _It sees you when you 're sleeping. It knows when you're awake. It knows if you've been bad or good, so be good for goodness sake. You better watch out._ Brought to you by Google and the U.S Department of Homeland Security.

<comment><USER3> That's one heck of a writing prompt.

</comment></comment><comment><USER4> "Take him to different places and earn check-in points. Make new Teddy friends by meeting them often and unlock achievements!"

Okay - I'll be "that guy". Why are they doing this? Presumably the target market is children for this specific implementation, but is it just having them do tasks for the sake of incrementing a counter in the app, or is there some actual benefit to encouraging the child to jump through these hoops? Not every toy needs to be educational, but what purpose does this thing have apart from just existing because it's possible?

I can attach a beacon to my toilet paper. It'll let me know when I'm nearby, and I can earn check-in points every time I take a shit. But why? Some of these things need to start asking themselves why they exist.

<comment><AUTHOR> While we tried to think about new ways a toy could be implemented, our brains were stuck in the ways we play today - with points and achievements. So while the idea is radical, it suffers from having parts of it get inspiration from today's apps.</comment></comment>


Why the Novel Matters - <AUTHOR> https://www.newstatesman.com/%E2%80%8Beimear-mcbride-goldsmiths-lecture-why-the-novel-matters <comment><USER2> I heard one person say that reading a novel is the only time most people would engage with something that has a complex logical/abstract structure. Must people in their daily lives would not do anything like research or engineering work.

</comment><comment><USER3> Summary: Why novels are important, by a novelist.

Arguably, novels have been superseded by series. A single fiction book today is a trial balloon. If it sells, sequels, trilogies, and more trilogies follow. Book tours. Merchandise, and a movie or TV deal may follow.

The goal today is to create a brand. The brand may survive the author, as Tom Clancy(tm) has done.

Shakespeare wrote for the box office. Dickens was serialized in newspapers. Real authors sell.

<comment><USER4> This is what happens when you let the businesspeople determine societal values.

<comment><USER5> Business people don't determine societal values. Societal values determine the values of business people.

</comment></comment></comment><comment><USER6> This article feels disorganized. He switches context freely without alerting the reader. I cannot tell if it is an intentionally wistful style, or just disorganization. I'm curious, since the author claims to be a novelist and obviously cares deeply about the state of the modern novel, why is it written this way?

If you're the author, I'd love to hear your response.

<comment><USER7> Having read the article, I don't think it is disorganized. It makes an assertion, supports the assertion, explores the consequences, then returns to another aspect of the assertion. In the end, she returns to the theme and restates it.

The context switches, such as they are, come with the traditional signal to most readers: the paragraph. Yet each paragraph is built in sequels (like you would a novel): action (assertion), reaction (consequence).

Paragraph by paragraph:

Assertion from title: Novels are still important.

Question: Are they really? Reflection as context.

Assertion: I fear modern media leaves me only frightened.

Contradiction: Realization -- It won't.

Assertion: Novels exist outside of the political upheaval they arise from.

Resolution: _Doctor Zhivago_ as example of proof.

Section break (as a notice to the reader).

Assertion: Novels are an intimate communication between writer and reader.

Contradiction: "No one reads books anymore."

Assertion: People still read books.

Reflection: Orthodoxy of publishing and consumption has changed.

Assertion: The novel's purpose is to encapsulate its own world ("to be what it is").

Reflection: _Anna Karenina_ was not the novel Tolstoy set out to write, but it was the novel he had to write because he was skilled enough to write it. The story was in control.

Resolution: Good novels matter because they exist as complete in themselves without being slaves to the social forces from which they arise.

Break

...

She continues in this form, weaving layers onto the theme, like one writes a novel. It seems to me like a clever way to write an editorial.

</comment></comment><comment><USER8> Can HN name any living modern novelists who matter? Not science fiction cheese, or mediocrities touted by the NYC circle-jerk; someone who will be remembered in 100 years. Cormac Mccarthy is the only one that comes to mind. Maybe Tito Perdue. That's pretty much all I can think of for English language anyway.

<comment><USER5> Stephen King, David Mitchell off the top of my head.

<comment><USER9> Stephen King definitely has a chance, not particularly for his craft, but his memorable characters. Carrie, It, Christine, Annie Wilkes, and Jack Torrance to name a few. Granted, movies will definitely help his longevity.</comment></comment></comment>


The Fuzzball Fix for a Black Hole Paradox - <AUTHOR> https://www.quantamagazine.org/20150623-fuzzballs-black-hole-firewalls/

<comment><USER2> Great title. Terrible read.

<comment><USER3> TL;DR: We still don't understand black holes, and String Theory complicates the possibility space.</comment></comment>


Indonesia's Ancient 'Hobbits' May Have Evolved Quickly - <AUTHOR> https://www.atlasobscura.com/articles/flores-island-hobbit-evolution <comment><USER2> If this kind of stuff interests you, "Who We Are and How We Got Here: Ancient DNA and the New Science of the Human Past" by David Reich is interesting and very up to date.

[https://www.goodreads.com/book/show/35749414-who-we-are- and-...](https://www.goodreads.com/book/show/35749414-who-we-are-and-how-we- got-here?from_search=true)

<comment><USER3> The Insight Podcast also has a lot of valuable stuff along those line in the archive.

[https://insitome.libsyn.com](https://insitome.libsyn.com)

</comment></comment><comment><USER4> Source without the regurgitation:

[https://royalsocietypublishing.org/doi/10.1098/rsbl.2019.048...](https://royalsocietypublishing.org/doi/10.1098/rsbl.2019.0481)

</comment><comment><USER5> Pop-up box says "We value your privacy" but there's only an "I accept" button. To withdraw your consent you have to go to their privacy policy, which at the bottom says:

"The Website is hosted in the United States and is intended for and directed to users in the United States. If you are accessing the Website from the European Union, Asia, or any other region with laws or regulations governing personal data collection, use, and disclosure, that differ from United States laws, please be advised that through your continued use of the Website, which is governed by U.S. law, this Privacy Policy, and our Terms of Use, you are transferring your personal information to the United States and you consent to that transfer."

Makes me sad.

<comment><USER6> The first sentence quoted above makes no sense. If they really intended their site only for users from the US they could implement IP blocks. So what does this kind of legalese actually intend to cover? A way to avoid having to deal with GDPR or other international obligations?</comment></comment>


The BBC's top male star is paid 4 times as much as its top female star - <AUTHOR> https://qz.com/1033273/chris-evans-and-claudia-winkleman-bbc-pay-controversy-reveals-big-gender-gap/ <comment><USER2> It's interesting to see the media close ranks and point to the gender angle. What about the fact that they are all paid too damn much! OTOH, it's nice to see the PC police with egg on their faces.</comment>


We Landed An Interview At Y Combinator But Decided Not To Go — Here's Why - <AUTHOR> https://medium.com/@michaelhsc/we-got-another-interview-at-y-combinator-were-not-going-and-this-is-why-7ec3d7a83642

<comment><USER2> Congrats on being invited to an interview, and for your progress with Sniply. I understand completing an application even if you don't intend to join a YC batch, but why submit it? Did your team previously want to get into YC, but decide not to right after receiving the interview invite?

The feedback even rejected teams receive after interviews seems incredibly valuable, and it's definitely coveted by those who were rejected with no feedback. You said that your team will probably apply again in the future. Why not try to get in now, unless something prevents one of the cofounders from being able to fully commit to YC this batch?

It seems like your team is doing great, but consider that the YC partners or alumni may know and be able to help you out with something you aren't even aware that you'll need help with yet. I don't see the benefit of your decision. Perhaps some of your answers will help me understand.

</comment><comment><USER3> This reminds me of a recent criticism I read about Techstars.

The argument was that if you can get into Techstars, you didn't need Techstars. (The premise there is that Techstars uses accurate, meritocratic criteria for selecting companies, which is obviously false, as it is for all human-based selection processes.)

In my opinion, the best possible scenario for accelerators is to identify/fund companies that have the following 3 characteristics:

1) Few social advantages (lacking experience, connections, etc.)

2) Will require VC because it's impossible or counterproductive for them to reach profitability quickly (Facebooks and Ubers of the world)

3) Can't go without a paycheck for 12+ months

</comment><comment><USER4> _So why am I writing about this? Because I know a lot of people want to get into Y Combinator and I know a lot of people just got rejected._

A completely pointless humblebrag of a post.

<comment><AUTHOR> Hey _pius,

I'm sorry you interpreted it that way. In fact, I don't think we'd get into YC even if we tried for the interview—it's not really the point of the post. I just wanted to share our rejection experience and how we struggled to recover from it. My sincerest apologies if the post somehow offended you.

Sincerely, Mike</comment></comment>


Ask HN: Is 'By using this this site you agree to' legal/contractually binding? - <AUTHOR> Sorry if I did this wrong, this is my first actual post.
I see these pop-ups or modals on so many sites constantly annoying me. I read almost none of them and block most of them so they can't say 'well they clicked X so they agreed!'
It feels like walking into a store and being told after you are inside that by entering you have agreed to, I dont know, buy 10 things for $100 each.
How is it not complete bullshit to be told that by landing on some random page, or viewing some random article they can say you have agreed to what may be 10 pages of TOS, and they only show you what you've actually 'agreed to' if you click a couple more links and do some heavy reading.
This popup on the NYT article on HN today about the heroin epidemic sent me over the edge, and finally prompted me to ask this here. <comment><USER2> IANAL -- But I think that no one knows. Some maybe, most probably not (see the Linked In lawsuit -- [https://www.theverge.com/2017/8/15/16148250/microsoft- linked...](https://www.theverge.com/2017/8/15/16148250/microsoft-linkedin- third-party-data-access-judge-ruling)). This all has to be tested in court, but it has not yet. Just like EULAs -- more bark then bite, but fear will keep the local systems in line.

</comment><comment><USER3> The phrase you can Google is "clickwrap." It's a variation on the old practice of telling buyers they were bound by the terms on the box when they opened the shrinkwrap.

At the level you're asking, yes, it can be binding in most US places. But lots of legal rules apply to unreasonable or surprise contract terms. So "it depends" is about as straight an answer you can get here.

</comment><comment><USER4> I am not a lawyer, but it might be helpful to include the country and state/province you are hoping to get the laws for as it may be binding in some jurisdictions and non-binding in others.

<comment><AUTHOR> Oh man, I'm that typical American thinking everywhere else is the same, I'm so sorry. I'm US based, from California.

Since you mentioned locale though, would the location of the site hosting be the applicable laws, or would it be my location?

<comment><USER4> That's a great question that I wish I had a clear answer to. I would (hesitantly) assume that it would be the location which you are accessing the website from. I base this on the assumption that it would be similar to GDPR laws, where US companies serving EU customers must comply with EU laws (or non-California companies serving Californians having to comply with CCPA). Sorry I can't be of more help - it might be worth asking r/legaladvice or somewhere similar with a higher concentration of lawyers.

</comment></comment></comment><comment><USER5> From the GDPR guidelines:

Consent requires a positive opt-in. Don't use pre-ticked boxes or any other method of default consent.</comment>


New Mosquito Repellents Beat DEET - <AUTHOR> http://www.wired.com/wiredscience/2009/08/deetstreet/

<comment><USER2> "DEET affects cells in a manner similar to nerve gas, and enhances the toxic effects of a common pesticide. The study was preliminary and was conducted on unprotected cells in petri dishes, so it may not be relevant for humans."

I don't care if DEET hasn't been proven to be toxic, I still get a little creeped out if I have to put it on my skin. Hopefully this new chemical proves to be broadly effective.</comment>


Evernote – The $0 Growth Engine - <AUTHOR> http://growthhackers.com/companies/evernote/

<comment><USER2> Their fanatical race to be there on day one of every new appstore launch, and ride the promotion that entailed was brilliant for the time.

</comment><comment><USER3> some great learnings</comment>


Introducing: Autocap - <AUTHOR> https://medium.com/unpacking-trunk-club/introducing-autocap-f33701f3264a#.hie33gflx <comment><USER2> I wrote the Autocap post and helped work on the project — shout if you have any questions!

</comment><comment><USER3> Awesome, love it!</comment>


Y Combinator-Backed InstallMonetizer Is A Selective Ad Network For Desktop - <AUTHOR> http://techcrunch.com/2013/01/14/y-combinator-backed-installmonetizer-is-a-selective-ad-network-for-desktop-software/

<comment><USER3> For those who were unaware this market existed: if you hypothetically distributed a downloadable application, you'd be bored to tears of sales reps (or spambots) from Pay Per Install advertising companies attempting to sign you up for their platform. The going rate was about $1 a download (n.b. that figure is very outdated -- probably less these days). This is -- again, not talking about the YC company here -- for encouraging customers to either change their search engine provider to one who pays the PPI network, install a toolbar in their browser or desktop which either shows ads or gets searches (more commonly), or just going ahead and rooting the user.

I'll confess that I haven't always been a model of politeness when responding to these sales pitches.

This is one of the many, many avenues on the Internet advertising chain by which billions of dollars is transferred between large, publicly well-regarded companies and six layers of intermediaries and... folks who the large, well- regarded companies would never, ever, ever do business with.

</comment><comment><USER4> I am sure everyone has had a slimy experience with desktop applications (usually windows based) sneaking or including advertising. I for sure have spent way too much time cleaning adware off family computers.

My comment about this startup would be: "what makes you any different, other than your promise to keep it professional and clean from the junk" - <USER2> its a slippery slope and %99 of the time the users won't know the difference between your ads and the slimy ones.

</comment><comment><USER5> _"We looked really really hard to find legitimate sources of income [from free downloads],"_

Don't?

In all seriousness, should a source of income from hosting free downloads exist? The very nature of the consumer's expectations is why it is so hard to find a legitimate source of income. If you can't make it work without deception, then don't host free downloads.

This is a problem with free software. It's free to make, free to use, but has a distribution cost.</comment>


Ditching the Semantic Web - <AUTHOR> http://inamidst.com/whits/2008/ditching

<comment><USER2> Maybe it would be better if we try a more top down approach generating data semantically?

</comment><comment><USER3> this perspective is 2 years older than this post... even RDF people agree that the semantic web lower case is taking hold

</comment><comment><USER4> no mechanism that allows or even requires content authors to create their own metadata will ever take off. lets go back in time to 1996 and look at the meta tag. the idea was that people would describe pages with terms like "cancer research" or "fly fishing" but instead used terms like "pussy cunt fuck cum orgy". why? because people figured out very quickly what people were looking for on the web and crafted meta tag keyphrases apprpriately

the whole point of quality search engines like google is to circumvent this garbage....i.e. circumvent the semantic web

microformats just moves the problem into a new area of the text. another flop.

<comment><USER5> _no mechanism that allows or even requires content authors to create their own metadata will ever take off._

That's (mostly) true if there's no trust model. Once you insert some sort of trust or authorization model, this problem gets mitigated pretty quickly. The most obvious counterexample to your point is the rich ecosystem of API-based mashups. Mashups exist as integration points for multiple content sources where content authors provide their own metadata.

While there's a lot of talk these days about the idea of "semantic search engines," most practical uses of the semantic web are actually just souped up mashups -- solutions to integration problems combined with some lightweight AI.

<comment><USER4> _That's (mostly) true if there's no trust model_

there isn't one.

<comment><USER5> _there isn't one._

That's about as true for mashups as it is for the semantic web; in both cases, there is not an "official" trust model used across the web, though it's obviously possible for semantic web providers to do what every other API provider does and simply use their reputation. For example, what makes you trust the data you get from any API at all, if not for the provider's reputation? I do agree that there should be a more uniform approach in order to get wide usage of the technology beyond the enterprise, academia, and medicine.

This apparent lack of an official trust model won't be the case for long with POWDER [1] on the horizon. POWDER is on its way to becoming a ratified W3C standard and it makes steps to address the idea of a "web of trust." Who knows what kind of traction this will get in the near term, but I think it's a step in the right direction.

[1] <http://www.w3.org/TR/2008/WD-powder-primer-20080815>

<comment><USER6> Right, but who trusts the W3C? ;-)

<comment><USER5> hehe, good question :P

</comment></comment></comment></comment></comment></comment><comment><USER7> SemWeb and Facebook

Say you want to list name:knows:name, would you rather:

a. use /friends.rdf

b. use /GetFriendsList.php and get a JSON list of friends</comment>


Doctors' Suicide Rate Highest of Any Profession - <AUTHOR> https://www.webmd.com/mental-health/news/20180508/doctors-suicide-rate-highest-of-any-profession <comment><USER2> From the article:

> _The results also showed that although female doctors attempt suicide far > less often than women in the general population, their completion rate > exceeds that of the general population by 2.5 to 4 times. It also equals the > completion rate of male doctors._

This squares with what I have seen elsewhere. Doctors don't have the highest rate of suicide attempts, what they have is the highest rate of suicide _successes_.

Any time you see a news report about doctors having a high suicide rate it is natural to think that doctors are more likely to be suicidal. But this is wrong. Instead, doctors who are suicidal are really good at killing themselves.

</comment><comment><USER3> When you're a doctor mortality is always a topic at hand. When you're a normal person mortality is almost always a topic deferred for another day. To be or not to be? Not today dear I have a headache.

</comment><comment><USER4> Attempted or successful?</comment>


Reconfigurable Robot Can Climb Up Its Own Track - <AUTHOR> https://spectrum.ieee.org/automaton/robotics/robotics-hardware/reconfigurable-robot-can-climb-up-its-own-track <comment><USER2> Great, now we can't even escape via stairs or a moat...</comment>


Ask HN: Which London startups are hiring? - <AUTHOR>

<comment><USER2> More than likely we are all hanging out in Shoreditch pubs at this point in the evening, supping our real ales, playing foosball and will duly head home in a few hours on our fixies, with our hipster moustaches flying out gloriously behind us in the wind.

You should repost this Monday morning GMT.

Keep it dusty

N.Barley (Trashbat.co.ck)

</comment><comment><USER3> Not exactly London, but we're looking for Rails devs a few hours north in Leeds. [http://www.pocketworks.co.uk/jobs](http://www.pocketworks.co.uk/jobs)

</comment><comment><USER4> [https://www.siliconmilkroundabout.com/startups](https://www.siliconmilkroundabout.com/startups) is a good list (and you should probably go to the event if you're in the market)

</comment><comment><USER5> Try www.workinstartups.com - lots of UK companies on there</comment>


10 tips for optimizing mySql queries - <AUTHOR> http://20bits.com/articles/10-tips-for-optimizing-mysql-queries-that-dont-suck/

<comment><USER2> _SQL is Not C <example code>_

I would be very surprised if the optimizer did not treat his two example queries the same.

<comment><USER3> In the earliest versions of MySQL that supported subqueries IIRC you could see different EXPLAINs for what, to me, appeared to be equivalent queries. That is to say, I don't believe the query optimizer is/was MySQL's key feature at that time.

Then again, it wasn't that long ago (2003) that MySQL 4.0 came out. Before that the subquery format was a syntax error. :/

</comment></comment><comment><USER4> _COUNT() incurs no additional cost for a well-structured query_

"Well structured" query meaning there is no WHERE clause...

</comment><comment><USER5> Nothing like trying to read an article on mySQL optimization and I get "Error establishing database connection" .. :(

<comment><USER6> I guess I deserved that...heh.

My WordPress cache plugin got disabled in one of the many upgrades. Instead of serving 400 requests per second my server was serving less than 1.

Man, WordPress performance sucks...</comment></comment>