The Beauty of Clojure - <AUTHOR> http://owenrh.me.uk/blog/2015/08/24/ <comment><USER3> I don't get it why Clojure and other Lisp tutorials throw things like this in face of beginners:

        (reduce + (map (comp inc inc) (range 10)))

instead of just using things like the "->" macro to make the damn thing just as in any other language:

        (-> (range 10)
            (map #(+ % 2))
            (sum))

...it's as if _they purposely try to scare people away from Lisp!_ Some kind of smug superiority makes them wanna make sure no "lesser mortals" want to touch their beloved language. (The added benefit would be that later you can "blow their minds" but showing them how to _write "->" themselves_ and instantly introduce them to the power of macros!)

This is almost close to showing a code snippet like this to someone trying to learn Haskell:

        fix$(<$>)<$>(:)<*>((<$>((:[{- thor's mother -}])<$>))(=<<)<$>(*)<$>(*2))$1

(it only prints the powers of 2, but it was enough to scare some people into calling Haskell "the Taliban version of ML"... [http://www.theregister.co.uk/Print/2012/12/21/financial_soft...](http://www.theregister.co.uk/Print/2012/12/21/financial_software_disasters/))

...really, people, stop scaring learners away!

<comment><USER4> I'm new to Clojure and I'm trying to parse this line:

      (reduce + (map (comp inc inc) (range 10)))

Is the following a correct Haskell equivalent?

      foldr1 (+) (map (succ.succ) [1..10])

<comment><USER5> Mostly, but I'm pretty sure Clojure's range gives the integers from 0 to 9.

</comment></comment></comment><comment><USER6> This is very similar to my experience. There's definitely some friction getting started; the odd using/require macros for importing (which switched sometime in the last 2 years, which means a lot of out-of-date SO answers); the fact that most docs recommend using emacs which, if you aren't already a user, is not going to be easy to deal with; the parens.

But it's amazing. I do really miss types, but found that unit tests + Schema[0] serves my needs; they provide some type-ish enforcement, and do a terrific job documenting my code so that when I return to it months later, I have some idea of what's in all these map structures.

Another unsung feature is that emacs + paredit + s-exprs + repl means the actual mechanics of writing Clojure is wildly better than any other dev environment. The ability to operate confidently and consistently on semantic units of code vs. text is really amazing and I immediately miss it when I switch back to JS or Python. I'm sure other Clojurists felt they had already experienced something like FB's Prune when it was discussed here a few days ago.

Not to mention learning a Lisp really does increase your understanding of what's possible. I've seen others recommend holding off on playing with macros until you've become quite familiar with the language, but I couldn't disagree more. Play with them right away! I have perhaps ~200 hours of Clojure under my belt -- barely anything -- but I've hacked together a few useful macros. Though I barely understand how they work when revisiting them, it definitely increased my understanding of what's possible, and what's missing, in other languages.

So yeah...learn some Clojure. Just do it.

[0] [https://github.com/Prismatic/schema](https://github.com/Prismatic/schema)

<comment><USER7> Note: you don't need to commit to Emacs to get the productivity benefits of Clojure.

Eclipse with the Counterclockwise plugin (and I believe IntelliJ with Cursive too) also give you comprehensive REPL, s-expr manipulation and paredit features.

<comment><USER8> The benefit of CIDER (the Clojure Emacs development environment) is that it now has a s-expr based debugger, whereas Cursive's debugger is still call stack based. So you can traverse the AST like in any other Lisp debugger and evaluate and manipulate s-exprs as you go.

</comment></comment></comment><comment><USER9> I've asked on StackOverflow, got shut down violenty, so I try to ask here: how do developers in large(-ish) projects deal with the lack of tool assisted refactoring? (Renaming a field in Java, I am 100% sure that every call site is found, changed or otherwise the codebase does not compile. The catch-all clause of dynamically typed language users seems to be that the test suite should catch everything, but looking at most projects, it's outstanding to even see 40% test coverage.)

<comment><USER10> I've never really needed it in Clojure. The code is that much more expressive that overall LoC is dramatically reduced (thus more easily viewed "in the whole"), and following a proper functional approach means good functions should be largely interchangeable and not dependent on any global state. So on the rare occasion I need to move something around, it's just meant a quick copy and paste and tweaking a few references.

Yes, Clojure is dynamically typed, but I think you're missing the gains you get from FP and expressiveness in terms of reducing labor.

<comment><USER11> I was trying to find time for Clojure, but I had always had doubts - <USER2> as the grandparent commenter...

He touched upon what I think is essential. The biggest things to lose by giving up Java is the tooling. Using the IDE I have many possibilities to learn about code, without ever needing to run it. For example by using find usages/implementations. The types on methods often give out hints about the big picture. Like, if a method passes a JAXB context, than I know I'm in the infrastructure layer. If I'm looking for a business rule "how is the price calculated", I can very quickly cut off a large portion of code which does not do it. After few iterations, it's almost certain I will get to the relevant code part.

Then I typically launch an application and put a breakpoint, to test my assumptions. After that, I have a lot of confidence about how the application behaves in that spot, even If I saw it for the first time.

If anybody asks me "Tell me if we can extend the functionality of calculating user score to include expert rating", I can provide a good effort approximation, even in a never seen before application. I just know, that given the tooling, I can filter out unrelated code parts and concentrate only on the relevant one.

The above concerns only code comprehension of a large project. The tooling does give you also power to do macro level restructuring, like breaking a large monolith into smaller modules. The compile time errors are like a high accuracy automatically generated todo-list.

Since it takes so little effort to make large changes, you gain the ability to do it multiple times and refine. If I broke something into two modules and a dependency cycle came up, I see it right away and can do everything again, a little bit better with the extra knowledge I got.

I have never seen anybody doing the same in Ruby, maybe because I've been working only about two years commercially in it, but a lot of times I've seen something quite opposite: introducing more hacks decreasing code quality, just to work around some conceptual error. While working in Java, I have seen a lot of situations like "we'll doing a hack here and the real solution will come with the next big release" and really the solution does come.

High level changes typically break a lot. With tooling, you gain confidence you can fix them, without introducing a lot of regression bugs. In Ruby, I saw the people just give up and leave monkey patches around. Then they just leave the project for the next unfortunate programmer.

So, back to the topic. You say that the change name refactoring is very simple in Clojure, because the impact of change is local to the method. My question is: How does Clojure tooling aid You in changing a place with a global impact? Like, changing the argument list of a very often called method (e.g. the method to serialize a structure to string to require the caller to provide an explicit encoding)? Can You, right after doing the change, quickly estimate how much work is there to fix all affected places? Do You have confidence that the list you provide is complete and doesn't miss anything critical? How certain can you be without running the code, only analyzing?

<comment><USER10> 1) That's up to the tests, just as in any language.

2) Some of the changes you describe are no less trivial to experiment with in an environment with a REPL. I routinely trial changes to small functions simply by running them in the REPL as discrete units before attempting to re- start an entire server project.

3) Good FP strategy rarely means dealing with _anything_ with a global impact. About the only exception is client-side ClojureScript, where keeping a single "state" atom is largely idiomatic, and even then, actually using it is a last resort action reserved for things like routing and user session, preferring instead local state unique only to a single file for anything else that requires it.

I think this is a case where you need to experience just how big the difference is between an expressive FP approach and something like Java is to really understand why it's not a problem, and indeed, amounts to something like a category error.

When a Java programmer asks me about refactoring Clojure features, I can't help but think about stuff like how the entire messaging system for the app I worked on over the summer fits on maybe 3 or 4 printed pages of code and only took a week and a half to complete, compared to say, EnterpriseGradeFizzBuzz ... The tools you describe sometimes don't exist, it's true, but that's because no one needs them. They exist to automate tedium and complexity that is largely idiomatic to Java and other similar OOP languages, but not expected, desired, or necessary in other paradigms of programming.

I know it's hard to believe, but there are other ways of doing things. We do alright, I promise.

<comment><USER11> Thank You for the answer!

After I reread my own comment I realized it sounded much more harsh than I wanted. Good you were not put off by the tone. Sorry for that.

I have to admit that my biggest pet peeve with working in Java projects are those high impact changes. I try as much as I can to propose "extending" changes, but working in a team means someone certainly at some point will propose "changing" how something works, without ever realizing all the consequences.

If by using Clojure you get the same benefits of what the best OO practices can give, than I'm willing to give it a try.

I do remember a presentation about working on immutable snapshots of reality, it was something along the lines "How do you normally check if a runner had both feet above the ground?". The example there was, that a typical imperative programmer just checks the first foot and then the other. Naturally, the second check happens some time after the first one. The selling point was that, in Clojure, that you operate on a immutable snapshot of a runner in time, so the feet are by default in the same point in time.

So, I'm liberated from thinking about a whole category of potential errors. I liked it a lot.

There are some other categories of potential errors as well. I mentioned them in my comment and you cleared that up for me.

Still I have another doubt, regarding a typical code reuse scenario. A simple example follows.

Let's say a programmer needs to ask the user for input. He writes a code, which pops up a user interface dialog and wires up an action to the buttons callback. All is fine. As the time passes, there is a need to provide more questions to the user. The dialog code grows. Someone files a bug, that, in a multi-monitor setup, the dialog shows up always on the wrong screen. The bugs get fixed. More dialogs are introduced. Another project starts up and wants to use the nice UI code. We designate it for a separate library. The first project must isolate and make everything generic. The requirement is that both projects must work on top of that library and the first one cannot loose any functionality.

This is where the tooling excels most. You just make the duplicated UI code look the same and use the "extract method" refactoring. The IDE tells you "I just found 5 duplicates, should I replace them all?". You answer yes. The IDE even tells you if there are any potential side effects. If there are none, you proceed. Then you use "use interface instead of method call" refactoring. In that way you can nicely extract contract between the client code from the library code. You move the stuff around, so that the library code lands in other project.

Then, You can just wire the library as a dependency in the Project B. It happens, that some needed functionality is not exposed. So you change the library and immediately see the impact on the A Project.

The case here is: you do not have to understand the A Project as a whole, since the tooling takes care of so much of the static dependencies. You just pull out the fun stuff and patch out the wounds. It does not require a lot of skill or knowledge, so a new project member can also be designated with a such task - not only the knowledgeable rock-star programmers that have the whole project in their head.

If you can assure me that in Clojure you can do the same in a safe manner than I'm all in. :) I'd appreciate any articles or stories explaining such scenarios in detail.

<comment><USER12> In Clojure, one doesn't need to rely on tooling to do refactoring, because things are isolated, loosely-coupled to begin with. There isn't much "unintended side effects" when one change Clojure code, because Clojure code consists of a bunch of functions working on immutable data structures.

The feel of programming in Clojure is very very different from what you are describing in a language such as Java. I have programmed Java since 1997, ever since I switched to Clojure, all those pains and fears of changing code has evaporated. I am not afraid of changing things in Clojure at all, because I know the effects of my changes are local.

Of course, Clojure toolings do include some convenient features such as "extract function", "rename symbol", etc, but these are just some niceties that save some typing and editing. They are not indispensable like those in Java.

<comment><USER11> Ok, so there are a lot less unintended side effects. I got that.

What about the intended ones - how do You approach them? Let's say You've written a ClojureScript webapp using the Angular framework and you need to migrate it to V2. AFAIK there were some breaking/conceptual changes which force significant rework. How do You make sure that after changing it everything works - even the most obscure option that only one user uses (as in the notorious example of Search Keyboard Shortcut in Outlook by Bill Gates)?

<comment><USER13> > You've written a ClojureScript webapp using the Angular framework

I know this is an example but Angular is terrible with Clojurescript. Clojure has an opinionated idea of how state should change over time and that opinion does not include two-way bound attributes. The reason the cljs community is virtually all React is because dom diffing makes the UI effectively a projection from state and that is epochal-time compatible.

> How do You make sure that after changing it everything works - even the most > obscure option that only one user uses?

Depends how your app is designed. In the general case where, say, you're doing the equivalent replacing Angular with Ember you just have to do it and lean on tests/QA. I have just recently finished such a refactor and it's about as fun as you're implying.

With the refactor, I have a better plan going forward! We're now on the re- frame model. All state is now in the global atom (instead of mostly being in the atom but some being component-local), dataflow is unidirectional, and we're capturing all non-determinant actions as event params. Together, it means serializing the state atom and a sequence of events allows playback on the changed code. At least in theory. I wound up having to ship rewrite delayed features and haven't taken the time to build recording/playback support.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> S-expressions have changed the way I think, and it's really great. With paredit (or some other structural editor) and hiccup[1] I can make html so quickly out of pure functions that it's truly a joy. Using Clojure's datastructures, along with all the functions made to alter those datastructures gives such an immense feeling of power.

[1] [http://hiccup.space](http://hiccup.space)

</comment><comment><USER15> As disclaimer, I've been a Scala zealot for the last 3 years. On Clojure vs Scala, usually comparisons are kind of unfair I think. As somebody interested in FP, I tried Clojure first. And FP being all about immutable data- structures, pure functions operating on immutable data-structures and dealing with side-effects explicitly by means of abstractions such as the I/O Monad, I expected to see that in Clojure, seeing how people describe it as being very FP.

And it was like a big WTF for me seeing how for example everything in Clojure is a Var that can be changed. And eventually I got it, I mean Clojure is a LISP and it's meant to be compiled by a REPL and the unit of compilation is not a file and this is in LISP's tradition and so on and so forth. But it's still a WTF given its usual characterization. Even in Java classes are completely immutable (until you start manipulating bytecode of course) and you've got "final" declarations. You have no "final" in Clojure. And this is actually a pity because it (probably) means that those persistent data- structures can't be implemented in Clojure, as "final" on top of the JVM comes with a pretty cool contract in the Java Memory Model that you need. And then instead of Scala's implicit parameters, that are actually very explicit and type-checked by the compiler, in Clojure you have package-wide vars or refs that people manipulate as a poor man's dependency injection mechanism. And state changes are usually done by mutating atoms. Well that's cool, in Scala people also do that, but in Scala you also have a mature implementation of the I/O monad and monad transformers if you want it, or various FRP libraries. And I'm sure that Clojure has plenty of libraries, but overall I feel that in Scala the ecosystem of design patterns _borrowed-from-Haskell_ is more mature.

Scala provides mutable variants of its data-structures in the standard library. But that's not extra rope to hang yourself, because in Clojure the use cases still exist and people end up using Java's mutable data-structures instead. In Scala the blend of OOP and FP can sound overwhelming, but it's actually the healthiest blend of FP + OOP to ever come up in a programming language. And in Clojure, just because you can't declare a class, that doesn't mean that OOP doesn't exist. It does and the blend is not healthy. This is why "reify" and "proxy" exist and are used quite frequently. And things like clojure.lang.ISeq are a Java OOP interface and not a protocol. Basically Scala is trying to make the best of OOP, whereas Clojure considers it a necessary evil of the host platform that it can't get rid of. Pick your poison.

<comment><USER16> > In Scala the blend of OOP and FP can sound overwhelming, but it's actually > the healthiest blend of FP + OOP to ever come up in a programming language.

Have you tried OCaml or F#?

<comment><USER17> Scala is definitely a better blend of FP and OOP than either of those languages. It's also a heavier FP language that either of those.

<comment><USER16> I fail to see how.

<comment><USER18> Scala is more functional because it encourages immutability more strongly and allows better abstractions like typeclasses, higher-kinded types while being roughly even on the modularity front with OCaml (there are a few things easier done in OCaml and a few things easier done in Scala) and beating the shit out of F#.

Not having a separate module and object system is another plus when compared to OCaml.

It unifies OO and FP better than OCaml and F#, because OO implemented in OCaml and F# feels like the designers tried to make a point about how much they dislike OO. What's the first thing OCaml/F# devs tell others about OO in their langauge? To avoid it.

<comment><USER19> They tell people to avoid the things _called_ objects in OCaml which essentially are just row-typed dynamic records and an inheritance system. Really it's the inheritance system people are taught to avoid... Same as anyone in OO is being taught now.

OTOH OCaml, as an ML, inherits an _outstanding_ module story which is really the core of OO anyway. I'd happily say OCaml is a better OO language than Scala for that reason.

<comment><USER18> The module story is pretty comparable and many things can be translated directly between OCaml's module system and Scala's.

With the module being roughly equal, and while objects suck in OCaml, but don't suck in Scala, I'm kind of surprised by your judgment.

<comment><USER19> The module system _is_ the object system fwiw. The things OCaml calls objects are just dynamic row-typed beasties which is why nobody recommends them (except to use as phantom parameters to get your own row typing).

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER20> > I can refactor a huge codebase in my IDE. Good luck trying that with > Clojure.

Cursive Clojure, a plugin for IntelliJ has excellent refactoring support, especially considering how dynamic Clojure is. If you've come from a Java background, this gives you a lot of the refactoring and 'Where Used' functionality that you might be used to.

<comment><USER21> Yep, Cursive is definitely quite impressive.

Here's a very informative intro by Cursive's developer, complete with some very compelling demos:

[https://www.youtube.com/watch?v=vt1y2FbWQMg](https://www.youtube.com/watch?v=vt1y2FbWQMg)

</comment></comment><comment><USER22> Great post.

Most discussions on lispy languages focus on the syntax. The unsaid assumption is that the only diff between a lisp and a non-lisp is the syntax. However, using lisp actually makes you think differently about programming. It is that which for me personally, is the selling point of a lisp. The syntax itself is merely expression, and is honestly simpler to grok than most other languages thanks to its consistency.

</comment><comment><USER23> This post focuses on Clojure as a very pragmatic Lisp, but that, while great in itself, is not what makes Clojure so interesting. Clojure has proposed an interesting solution to the shared mutable state problem without trying to reduce it as much as possible like Erlang and without being pure functional -- and thus changing the whole concept of state and effects -- like Haskell (Clojure is imperative-functional). Clojure's solution is that all shared mutable state be transactional (or atomic, which is a special case of transactional). AFAIK, this is the first language to do that (again, without going down the pure-functional path). An imperative language that doesn't restrict global mutable state, but makes it transactional is a very interesting case study.

</comment><comment><USER24> I wonder why the author left the thread-first and thread-last macros as a footnote.

This:

        (reduce + (map (comp inc inc) (range 10)))

And this:

        (->>
           (range 10)
           (map (comp inc inc))
           (reduce +))

Are totally different from a readability standpoint. Yeah, there's some initial syntax to get used to, but in the long run I've noticed it to be the difference between immediately understanding what some code is doing and having my eyes glaze over.

</comment><comment><USER25> For the OP - i've recently been programming in Scala, mostly spark jobs, nothing too complex, but damn its beautiful. I love how expressive the language is (certainly it can also be very complicated in large codebases, as you use more features, but I haven't encountered that yet). Heck just the simple 'scala' repl + JVM interop makes developing Java code so much easier. You seem to have tried Scala too - i'm wondering what you think of Clojure vs. Scala and what made you switch?

<comment><USER26> Scala got no macros. Which makes it infinitely less powerful than _any_ language with macros, including even something like Clojure.

<comment><USER25> Similarly, Clojure got no types. Which makes it infinitely less runtime-safe then ___any_ __language with types. Takes a more nuanced argument.

<comment><USER26> For a language with macros it does not matter at all. You can add _any_ type system you like on top of it. Metalanguages are infinitely flexible.

<comment><USER18> The strength of a type system is that there is one. If everyone uses his/her own self-made pet of a typesystem most of the benefits are gone as soon as you are more than a one-man-hobbyist project.

Probably explains why most Lisps consist of one-man-hobbyist projects, though.

<comment><USER26> > The strength of a type system is that there is one.

I do not agree. There is no single type system that would fit all the possible use cases.

> Probably explains why most Lisps consist of one-man-hobbyist projects, > though.

No, it does not.

<comment><USER18> Type systems are by-definition only a conservative approximation of all programs.

The good thing is that 99.999999999999% of all programs never need to be written, and there are plenty of type systems which deal well with the last 0.00000000001.

> No, it does not.

Ok, that leaves the failure of Lisp outside of hobbyist mom's basements a mystery.

<comment><USER26> > Type systems are by-definition only a conservative approximation of all > programs.

This is where I lost a track of your arguments.

> Ok, that leaves the failure of Lisp outside of hobbyist mom's basements a > mystery.

Lisp did not fail. It's in pretty much all the mainstream languages now.

<comment><USER18> > This is where I lost a track of your arguments.

Then maybe you should maybe spend some time studying these topics instead of acting up on HN.

> Lisp did not fail. It's in pretty much all the mainstream languages now.

This is where I lost the last doubts about the reality and your lack of closeness with it.

<comment><USER26> > Then maybe you should maybe spend some time studying these topics instead of > acting up on HN.

Chances are, I implemented more varieties of type systems than you can name.

> This is where I lost the last doubts about the reality and your lack of > closeness with it.

Scala fanboys are much more detached from the reality. The reality rejected bondage&discipline languages long ago.

<comment><USER18> You continue to amuse me.

<comment><USER26> You did not answer, fanboy. Does Scala already allow to use macro in the same compilation unit it was defined?

<comment><USER27> > You did not answer, fanboy

We ban accounts that do this repeatedly. On HN, please post civilly and substantively, or not at all.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER28>
      (reduce + (map (comp inc inc) (range 10)))

is not analogous to (_ + 2). The more similar and idiomatic code is:

      (reduce + (map #(+ % 2) (range 10)))

</comment><comment><USER29> The first example could also be written as:

        (reduce + (map #(+ % 2) (range 10)))

which looks more like the Scala example, or, perhaps more readable, in the long form:

        (reduce + (map (fn [x] (+ x 2)) (range 10)))

</comment><comment><USER30> Why is reading from left to right counter-intuitive? Don't we read f(x, y) from left to right as well? (f x y) has the same order, even the same amount of parentheses.

<comment><USER31> (< x y) is the main one I have trouble with. The alligator is eating them both!

</comment></comment><comment><USER12> For this code,

(reduce + (map (comp inc inc) (range 10)))

Clojure people would normally use thread macro, like so:

(->> (range 10) (map #(+ % 2)) (reduce +))

This would be similar to the Scala version in term of order.

<comment><USER32> This reminds me that there really should be a reader macro for "partial" in Clojure.

</comment></comment><comment><USER33> > _The use of s-expressions and their resulting prefix notation is in many > respects the secret sauce of Clojure. However, it requires you to read > right-to-left3 and inside-out. This is counterintuitive to most of us, and > takes some getting over. It is a very real barrier to entry for Lisps._

Author still doesn't get it. Lisp must, in fact, be read from the outside in, left to right --- in the same obvious direction in which it is evaluated. It is not very different from a nested f(x, y, ...) notation, except that the commas are gone, and the f ( exchange position to the ( f arrangement.

As a trivial example of why outside-in is wrong, is that if you follow that order, you might believe that (b c) is a function call in (defclass a () (b c)). The most important fact is that this is a class definition (in ANSI Common Lisp). The leftmost symbol in the outermost form, defclass, is the what McCarthy called the "main connective". It determines the entire meaning of the interior of the form and all of its subforms, so it behooves us to visit that first. When we recognize that, we then know that (b c) are slots, and not operator b applied to argument c.

The right-to-left part is completely bizarre. Why, as a matter of course, would you read the arguments of a form before the main connective symbol? If that, you want, languages for you, there are: Forth, PostScript.

<comment><USER34> Ha, yeah, maybe. I guess what I meant is this, say you have some OO/Scala-like code like this:

mydata.doA(blah).doB().doC(blah2).etc()

You can read it left-to-right: I've got some data, I do something to it, I then do something else to that result, etc. Maybe it's just that I've been using Java, and the like, for years but this feels simpler to me than s-expressions. At least initially.

With s-expressions I get something like (ignoring threading macros):

(etc (doC blah2 (doB (doA blah mydata))))

So when reading, from a data perspective, you kind of read outwards from the inner s-expression (which seems right-to-left to me). Or keep a kind of mental stack, as you read inwards (left-to-right). No?

</comment></comment><comment><USER35> As much as I like Clojure the lack of static typing always made refactoring a pain. The lack of it makes this a beauty I just can't appreciate and see.

</comment><comment><USER36> (comp inc inc) is weird. You'd normally use #(+ 2 %) or (partial + 2) instead.

<comment><USER34> Yeah, definitely. My bad. It's definitely not idiomatic.

I think was trying to avoid using the anonymous fn syntax, as I thought that was be more off-putting, and partial hadn't occurred to me at the time. In the end, I think I just confused the issue.

In retrospect, I should probably have used a totally different example, and avoided map and reduce as they are FP idioms. Live and learn, as they say.

</comment></comment><comment><USER37> My couple of comments:

\- Great write up, very approachable for who may be on the fence about toying clojure.

\- Re: Enterprise, while our enterprise footprint isn't ubiquitous yet, there are a couple of big name companies using clojure pretty heavily. Amazon, Walmart and Two Sigma amongst them. Also, because clojure sits on the JVM, we have a good interop story with legacy java codebases.

\- Re: Refactoring, you should checkout intellij + cursive clojure, it's made refactoring codebases much easier for myself.

<comment><USER34> Thanks.

Re: Enterprise, I've seen a presentation about some of the work going on at Walmart. Would be great to hear more 'stories from the trenches' from larger scale developments. It would really help sell the language.

Re: Refactoring, yeah, I'm totally busted on that one, my wording was way too strong as I haven't tried either Cursive or clj-refactor. Plus in a way, it's an apples and pears comparison, between OO and FP refactoring.

</comment></comment><comment><USER16> I would like to try to use Clojure for mobile development.

Together with ClojureCLR, RoboVM and reader conditionals it would be a good mix, without having to deal with FFI headaches.

But currently it is too slow on Android and I don't know how well ClojureCLR, if at all, runs as Universal Windows App.

<comment><USER38> For mobile a lot of folks are now using Clojurescript. There have been several highly rated discussions on here about the breakthroughs in the Clojurescript community for getting it to operate very quickly on mobile devices.

<comment><USER16> Thanks, but that approach is not something I would enjoy.

I try to stay away from the JavaScript universe unless I have a customer requesting a webdev project.

For me mobile dev means only native code and not web widgets.

<comment><USER38> I can understand, but JS is not what it used to be. Things like React, OSX JavaScriptCore, Qt's native JS engine (which also allows you to build native apps for any desktop or mobile platform using Clojurescript), the use of Clojurescript server-side with Node, the state of affairs in JS are changing very rapidly, and Clojurescript is right there for leveraging all of it.

<comment><USER16> I do know JavaScript quite well, most of our customers require web applications.

Using JavaScript related tooling outside work does not relate with fun, at least not for me.

</comment></comment></comment></comment></comment><comment><USER39> "FYI - there are better books to get started with [than the Joy of Clojure]."

FMI: what are they? :-)

<comment><USER40> Programming Clojure 2nd ed, Clojure for the Brave and True. Probably others as well :)

<comment><USER37> +1 for clojure for the brave and true. Best overview book out there IMO.

</comment></comment></comment><comment><USER41> Which is more beautiful, haskell or clojure? This is a subjective question, so I'm hoping to read subjective and highly opinionated answers.

<comment><USER42> well that first example in the article would be

        foldl (+) 0 (map (+2) [1..10])

or

        sum $ map (+2) [1..10]

So... make up your own mind.

As someone who has written only small chunks of lisp but at many different points in life, I do find the whole parens game to be a bit disorienting, but usually I can counter it by using newlines.

I would write something like

        (reduce + (map (comp inc inc) (range 10)))

as

        (reduce +
                (map (comp inc inc)
                     (range 10)))

<comment><USER43> Ranges are inclusive, so:

      sum $ map (+2) [0..9]

Nitpick, but it confused me for a second.

</comment></comment></comment><comment><USER44> Is there a good online course for a beginning programmer who wants to learn Clojure? If not, a good book with exercises?

<comment><USER34> Clojure Koans, is similar to 4clojure, and also worth a look> [http://clojurekoans.com/](http://clojurekoans.com/)

Bookwise, I thought the following were pretty good: 'Clojure in Action' by Amit Rathore and 'Clojure Programming' by Chas Emerick are both solid intro Clojure books. 'Web Development with Clojure' by Dmitri Sotnikov is also a great book, which obviously comes with more of a web-slant.

And I'd give a second thumbs up for 'Clojure for the Brave and True'.

</comment></comment><comment><USER45> The line below looks a lot more readable than the closure version.

Enumerable.Range(1, 10).Select(i => i + 2).Sum()

<comment><USER46> And I prefer

        sum(i + 2 for i in range(1, 10))

for readability. But we shouldn't judge languages on this sort of thing -- because then why don't we just write sum(range(3, 12)), or 63?

<comment><USER45> In both those cases you have to read it backwards to see what it does.

</comment></comment></comment><comment><USER47> Not, entirely true, there are some Clojure Frameworks like this one [http://coils.cc/coils/a-framework.html](http://coils.cc/coils/a-framework.html)

</comment><comment><USER48> Perfect description of the average Enterprise codebase!

</comment><comment><USER49> Great! Now go for Haskell :)</comment>


Show HN: Solving 1 DS/Algo problem a day. - <AUTHOR> Hi Hackers. I have been solving Data Structures/Algorithms problem as part of my interview preparation. I thought of sharing this here because this resource would be helpful for people just like me who are also in the process of preparation. I have provided links to the questions in my programs itself where it is necessary.
Link: https://github.com/sunilkumarc/100
The name of the repository is 100. This started as a project to solve 1 question each day for 100 days. But it is really difficult to manage between my work, Bangalore traffic and my side projects like this one. I have been trying my best to keep this project going. I have already solved around 50 questions. 50 more to go! <comment><USER2> Nice! I think I need to do something like this.

<comment><AUTHOR> Thank you :)</comment></comment>


Why aren't more companies like Amazon? - <AUTHOR> https://medium.com/future-tech-future-market/615de5a92b36 <comment><USER2> Nobody is challenging Amazon because their Earnings Per Share are...

-0.20. Negative 0.20.

Investors lump AMZN with GOOG and the like but GOOG's EPS is 33.59. TGT? 4.26. Walmart is 5.07.

No other company with a market cap (100+Bn) as large as AMZN is allowed to get away with that. The only one that comes close is Vodafone, with a tiny positive EPS (0.13).

It's important to note that if any other company spent until their EPS was negative, investors would _flip._

Amazon is playing with razor thin margins while trying to scale up a _platform to end all platoforms_ that we might someday use for everything without thinking about it. On that day/year/eon dollar bills might as well be printed with Jeff Bezos' face on them.

Amazon won't be using UPS and Fedex trucks on that day. They'll be using Amazon trucks. You'll know that era when you see it, I think.

If you're Walmart or Target its hard to justify it at this point, the stock could take a major dive from such a risk. They're at the "Ask-questions" phase, and the questions are always "What's the profit?" because these are publicly traded companies. Amazon has been playing it risky since the get-go.

Bezos is in for a _very_ long gamble, and that frustrates the hell out of some investors, but its lofty enough to still attract investment dollars while in the "build-first" stage. Hopefully they can pull it off for a few more years before the stock market shifts to "Ask-questions."

So that's why. Amazon is doing something bold that would cause the mother of all stock dives in any other 100+Bn company. They get a free pass because Bezos is convincing and for Amazon its sort-of-always-been-this-way. Walmart/Target/Etc do not have either of those luxuries - the incredible (or believable) visionary and being a company that's still in burn (build) mode.

<comment><USER3> This comment is spot on.

However, my next question is: What can we do to make more companies be like Amazon?

Not every business needs to operate on razor thin margins, but I'd love to see more big companies playing the long game and continuously innovating. Wall Street invests in returns, not innovation. What can be done to help reset that balance a bit?

<comment><USER4> Do we really _want_ other companies to be like Amazon? If the Amazon endgame is "own the entire retail sector," I'm not sure that we ("we" meaning "society at large", not just "Amazon shareholders") want _any_ company to be like Amazon... even Amazon.

Not to mention that when the endgame is "own the entire retail sector," even if other companies _want_ to be like Amazon, in the end they'd have to kill Amazon to do it. Owning the entire retail sector is incompatible with the existence of lots of thriving alternatives. It's like the Highlander -- there can be only one.

<comment> lhc- And, don't forget the rather nasty consequences of Amazon's ability to operate on no margins: it kills all their competitors who have to actually profit to stay alive. When Amazon moves into your market, your company is probably in big trouble. Really, thats good in the very short term (lower prices for consumers), but bad in the long term (because once amazon controls everything, theres no reason to keep their margins so low).

</comment></comment></comment></comment><comment><USER5> Amazon makes so little money relative to the size of their enterprise that Matt Yglesias has described them as a charity run by Wall Street.

<comment><USER6> If by 'charity' you mean the only efficient company on Wall Street. If things are properly efficient profit will be near 0. Large profits mean that competition has failed.

<comment><USER7> Your comment makes no sense. If their competition is pushing their profits to 0, then the competition's efficient too.

<comment><USER8> What he probably means to say that the market is efficient (which the retail sector is). Margins are razor-thin in the retail business because competition pushes profits to zero.

</comment></comment></comment></comment><comment><USER9> There are more companies like Amazon, but they don't exist online. Amazon is Walmart, Costco, CVS, and Target. (You could also compare them to Home Depot, Meijer, Kroger, etc.)

There are two traditional paths to success in business--high volume/low margin or low volume/high margin (Timex vs. Rolex). Walmart is the classic high volume/low margin company. They started as a five-and-dime. Over the years they used their growing market power to add more product lines until they became a one-stop shop for everything. Amazon has followed Walmart's playbook almost from the beginning. While other early competitors were passionate about books, Amazon was passionate about warehouses and operations. The same thing happened when Amazon moved into music, electronics, and everything else. They could operate faster and cheaper than the other guys.

There are two reasons why there isn't another Amazon in the online world. First, geography meant that Walmart, Target, and Costco didn't directly compete in every place from the very start. They had time to develop and fortify an operational base and then expand. Companies like buy.com had to immediately challenge amazon in order to survive. Second, technology companies don't generally focus on the low margin/high volume path. Online companies are generally populated by folks from the tech industry who look to Microsoft and Apple as their models for operating a company.

</comment><comment><USER10> Uhh try going to a VC to raise money with the Jeff Bezos story today:

"We're going to lose money for five years and then operate at absurdly low margins for eternity".

Look, Amazon may win in the long run, but asking why more companies aren't like amazon is like asking why every company isn't Apple. We can't all be outliers.

<comment><USER11> Or you could simply say: People who invest money are rarely committed to long- term strategies. And Amazons definition of long-term is very unique.

<comment><USER12> Investors don't have a problem with long term strategies. They have a problem with strategies that involve losing money consistently or making no profits for many years, in the hope that you can magically start making obscene profits sometime in the distant future. Most companies that practice this kind of long term strategy end up going bankrupt before the profits materialise, so it makes sense for investors to be wary of them. Warren Buffett is a long term investor, and even he would not touch Amazon's stock with a 10 foot pole.

<comment><USER11> But Amazon is not "Most companies". Amazon has done a brilliant job so far, and has changed from a bookstore to a cloud-provider, mega store, content generator and ad network (and probably many things more); utilizing the medium "internet" in a way most companies can only dream of.

In my opinion, like i said, Amazon has a very unique POV on long-term strategies and it collides with people (or stock markets) expectations on making a lot of money in a short time.

</comment></comment></comment></comment><comment><USER13> I get the concept of a two-minute read, but this article strikes me as lacking any substance whatsoever.

<comment><USER14> There should be a name for articles whose body adds (virtually) nothing to the title itself. That is not to say that the title is not worthwhile - but you can save yourself the trouble of reading as long as you got the title :)

<comment><USER15> They are already tagged like that here on Hacker News thankfully: see the medium.com?

</comment></comment></comment><comment><USER16> The companies that remind me most of Amazon are General Electric and Honda.

Amazon started with a single complex offering (centralized eCommerce) and from that they famously abstracted and platformized everything about their business: they decentralized their marketplace, they dogfooded their web services to the point that they were able to actually sell their web services, they relentlessly keep decoupling their core.

Honda, and General Electric, too started out with pretty simple value propositions. Honda started by selling piston rings to Toyota, and from there started manufacturing car part after car part until they had enough to create the cars themselves. (And it turned out that when you can manufacture a car yourself from start to finish, you can manufacture a lot of other stuff with the same goods, from drills to radios).

On the other end of the spectrum, General Electric expanded by maintaining otherwise orthogonal SBUs and becoming one of the first companies in the 20th century to really take advantage of cross-branding, figuring out that if a customer liked their lightbulb they'd be okay with using the same company to buy a handheld radio.

(Incidentally, both GE and Honda also profited tremendously from WWII. I hope no tech company happens to profit tremendously from a WWIII, mainly because I hope there is no WWIII.)

<comment><USER17> It actually reminds me a lot of Richard Branson's Virgin group. Started in the recording industry, then compulsively reinvested profits to get into airlines, hotels, cell phones, retail, spaceflight, and various other industries. And like Amazon, Virgin tends to hold investors by the balls, bleeding them dry to finance risky new ventures by the force of Branson's personality.

</comment></comment><comment><USER18> Why is it apparently considered hip nowadays to style a few simple paragraphs in font-size 5000%? If you're non-blind this is useless at best, and if you zoom by default, it's unusably large.

Annoying.

<comment><USER19> Unless the article is very long, I prefer to read it like that.

</comment></comment><comment><USER20> Isn't GE doing it to something extent? They're so diversified and so far away from the light bulb business that they originated from. Also, universal banks have diversified product offerings.

The article poorly assumes that every company has talent and capital to take on the risk of entering new markets all the time. It's easy to say "we should've done this and that" in hindsight of success but there are numerous failures of companies that tried to enter new markets and failed.

</comment><comment> genuine-a Amazon needs to start focusing more on the international market. Mark Meeker's 2013 internet trends showed that while 8 out of the top 10 internet properites are owned by american companies, 81% of the internet traffic going to these sights is international (Slide 6 of Mary Meeker's Internet Trends: <http://www.kpcb.com/insights/2013-internet-trends>). Even though Amazon had been around since the 1990's, Alibab's gross merchandise volume surpassed in the 2011-2012 time frame(Slide 69 of Mary Meeker's Internet Trends: <http://www.kpcb.com/insights/2013-internet-trends>). The emerging markets such as China and India, as well as the Next 11 countries (Research paper by Jim O'Niel: [http://www.goldmansachs.com/our-thinking/archive/archive- pdf...](http://www.goldmansachs.com/our-thinking/archive/archive-pdfs/brics- book/brics-chap-13.pdf)) is where Amazon needs to be focusing their efforts if they want to stay competitive in the next decade.

<comment><USER21> They just started in India.

<https://www.amazon.in/>

<comment> genuine-a tnuc, they definitely did just start there, I remember the HN post yesterday which was covering it! It's going to be interesting to see how they change their buisness model to better fit the Indian and South-east asian culture.

</comment></comment></comment><comment><USER14> I was kind of hoping the article would provide the answer.

</comment><comment><USER22> Answer: evolution. The ones who tried this don't exist any more.

Amazon is an outlier.

If another company did this, _but it's stock price didn't keep rising_ , corporate "raiders" will replace the board and get money back as dividends.

Sorry if my point isn't clear. I'm typing this in a hurry.

<comment><USER23> I'm not sure that Amazon is an outlier, but rather that as you say, other companies fear they would get raided if they tried to reinvest all their profits (what most companies probably ought to do a lot more of IMO) instead of issuing them as dividends and/or taking the money off-shore.

Given that Jeff Bezos cut his teeth at D.E. Shaw, I'll bet he went into this with his eyes wide open as opposed to the usual lucky and wet behind the ears ivy-league hipster willing to sign away 90+% of his/her idea's net worth from the get-go just to get a shot to pursue it.

Jeff Bezos was the right guy in the right place at the right time. That doesn't mean Amazon can't be taken out, it just means that someone needs to enter the space with a background capable of competing with him rather than creating another pets.com.

</comment></comment><comment><USER24> Why would any company want to be like Amazon!? They steal and do not protect the sellers. You can file an A-Z claim on anything that didn't have signature required and get your money back. Call their support and they cannot help you in any way. They buy there products from 3rd party sellers at net-60 terms and then return the merchandise that didn't sell back to you at your expense. They steal money from 3rd party merchants, when a buyer makes a claim they take directly from the seller instead of investigating the issue. What company would still be in business if they did all of this?

</comment><comment><USER25> Because there's no money in it?

Either you compete with them by lowering your prices to match (in which case you're almost making no profit, and probably a loss), or everyone ignores you and buys from Amazon.

<comment><USER26> The post doesn't mean why aren't there more ecommerce giants, but rather why don't more big companies aggressively reinvest their income into growth and to enter new markets rather than hoard cash just to satisfy stockholders.

</comment></comment><comment><USER17> Nobody has yet pointed out that the specific example cited in the article, online grocery delivery, is a reaction to Google entering one of their core businesses with same-day delivery?

<http://www.google.com/shopping/express/about/>

It seems to invalidate the premise that nobody is competing with Amazon.

</comment><comment><USER27> I don't buy the counter examples of Microsoft, Google, and Apple. All three of those have a history of entering new markets with large upfront expenses and turning them into successful businesses. What exactly is the difference between delivering groceries and creating the Xbox, Android, or the iPhone?

<comment><USER28> The main difference is the margin. IPhones sell, reportedly, at a 58% margin. The profit margin on Windows has, in the past, sometimes exceeded 90%.

Amazon is retail. They make 12% margins in a good year. Which is one big reason why Amazon will put significant effort into a new market with a 25% margin, that the others would turn up their noses at.

</comment></comment><comment><USER29> "They never enter a market they can't compete in, and they keep entering new markets all the time."

Auctions? Search?

</comment><comment><USER30> J.C. Penney. Nuff said.

</comment><comment><USER31> That comment "Nobody is challenging Amazon in e-commerce. Nobody." is highly inaccurate. Every major company already does deal in e-commerce. Amazon may do it best, but it doesn't mean they are not being challenged. Many companies are doing pretty well in e-commerce. Their expansion into grocery home delivery has been snail paced at best. It is like raving about Google Fiber when it will not be available for most of the country for a very long time.

</comment><comment><USER32> More companies aren't like Amazon because they want to make a profit. Amazon operates at cutthroat margins, as if it were still a startup sacrificing profitability to grab market share. Once most companies own a solid chunk of the market, their concern shifts from outcompeting everyone else on price to outcompeting everyone else in other areas and fattening their margins in the process.

Amazon is the outlier because Bezos is still in charge, and he's playing the long, _long_ game.</comment>


iPad, Therefore I Am - <AUTHOR> http://the.taoofmac.com/space/blog/2010/09/12/1655

<comment><USER2> He can't possibly type very fast on a regular keyboard...

I don't really understand the focus argument--seems more like a lack of self- discipline than an iPad "feature".

<comment><AUTHOR> Something that remedies your lack of self discipline is a perfectly fine feature, isn't it?</comment></comment>


The Mellotron In Action [video] - <AUTHOR> https://www.youtube.com/watch?v=VsEso9JagdQ <comment><USER3> Huh. I never knew that they weren't tape loops, but tape segments. You can see the mechanism here at about 4:45: [https://www.youtube.com/watch?time_continue=4&v=ByD8gH7kYxs](https://www.youtube.com/watch?time_continue=4&v=ByD8gH7kYxs)

</comment><comment><USER4> Another curious instrument is the Vako Orchestron, the one used by kraftwerk in trans europe express [1], this instrument uses optical disks as source of sound [1] [https://www.youtube.com/watch?v=bhkIOw4TyXE](https://www.youtube.com/watch?v=bhkIOw4TyXE)

[https://en.wikipedia.org/wiki/Orchestron](https://en.wikipedia.org/wiki/Orchestron) [https://www.youtube.com/watch?v=JCybRH8gIBI](https://www.youtube.com/watch?v=JCybRH8gIBI)

</comment><comment><USER5> Also check out this old mellotron advertisement from the 60s: [https://www.youtube.com/watch?v=HdkixaxjZCM](https://www.youtube.com/watch?v=HdkixaxjZCM)

</comment><comment> dj-wonk For those around the San Francisco area, you might want to check out the Emeryville Vintage Synthesizer Museum:

[https://www.kqed.org/arts/11260092/at-emeryvilles-vintage- sy...](https://www.kqed.org/arts/11260092/at-emeryvilles-vintage-synthesizer- museum-analog-sounds-rule)

[http://vintagesynthmuseum.com/VSM_Home.html](http://vintagesynthmuseum.com/VSM_Home.html)

[https://www.facebook.com/vintagesynthmuseum](https://www.facebook.com/vintagesynthmuseum)

(I don't see a Mellotron listed, but the others look fun.)

</comment><comment><USER6> Just to add that the mMellotron inspired the innovative looping 'choir' effect on 10cc's I'm Not in Love.

[https://www.theguardian.com/music/2018/feb/26/10cc-how-we- ma...](https://www.theguardian.com/music/2018/feb/26/10cc-how-we-made-im-not- in-love)

[https://en.m.wikipedia.org/wiki/I%27m_Not_in_Love](https://en.m.wikipedia.org/wiki/I%27m_Not_in_Love)

<comment><USER7> 10 CC (or rather, Godley and Creme) was super innovative.

Check this out:

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

</comment></comment><comment><USER8> Apparently these require a substantial amount of maintenance, so it's remarkable what good condition this one is in.

<comment> jim-jim-jim Genesis' mellotron would break down with enough regularity that they came up with a routine to perform while the technicians fixed it. I forget the specifics, but it involved a story from Gabriel and a one handed drum solo from Collins. You can hear it on some bootleg recordings from the 70s.

</comment></comment><comment><USER9> Here, let me destroy some of my precious karma.

I am so glad this stuff is in the past. I love cold, clean, infinite-track digital music making. I remember tape machines only too well. I remember tape slipping and breaking, having to splice tape, detesting tape hiss and how it multiplied every track. I remember old tape flaking and falling apart, and having to clean recording heads, and accidentally jostling spindles and ruining takes.

Some wonderful music was done on the Mellotron, notably the Beatles, Genesis, and Bowie. I love samplers, I delight in choosing loops, play extensively with soft synths, and would be very happy if the world never saw another Mellotron again. Just knowing they're around gives me the jitters ;)

<comment><USER10> The more advanced our tools become the more charming the faults and limitations of yesterday's technology appear.

The Mellotron is a gorgeous instrument and the simplicity of it is something very special, genius for its time. And I would personally kill to own one.

But we're lucky to not be stuck with tape and hiss and mechanical failures as routine occurrences

</comment></comment><comment><USER11> One modern player who does a great job using this instrument is John Medeski. I strongly recommend checking out his work with Club D'Elf.

<comment><USER12> Love Medeski. Have not heard Club D'Elf. Really dig the Martin/Medeski/Wood trio though. Also, Scofield's work with that trio is amazing.

<comment><USER13> Saw MMW a long while back and now I'm wondering if the thing I thought was a wurlitzer was maybe a mellotron -- standup piano with a big rotating cylinder on the top?

<comment><USER14> The rotating cylinder may have been a Leslie speaker which were pretty commonly paired w/ Wurlitzers, Hammonds, Farfisas, etc.

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

</comment></comment></comment></comment><comment><USER15> Some great examples of the Mellotron being used in music today:

Black Moth Super Rainbow - [https://www.youtube.com/watch?v=-1VAw5aaYW4](https://www.youtube.com/watch?v=-1VAw5aaYW4)

Steven Wilson - Luminol - [https://youtu.be/wYfQ1I-VV7M?t=499](https://youtu.be/wYfQ1I-VV7M?t=499)

<comment><USER16> That Black Moth Super Rainbow track is utterly bloody awesome.

And hey who can't resist progging out with Steven Wilson (... _digs out his Porcupine albums_ ).

That Mellotron flute sound is so haunting. Kinda reminds me of early 1970's BBC children's programming where the cast could be cute wee knitted mice with their story told by a friendly, mellow toned BBC actor.

<comment><USER17> Clangers [0]. Really unique cartoon, slowpaced and fun. The knitted characters communicate with whistles, and interpreted by a narrator. They recently had a 'reboot' of the series, narrated by William Shatner of the StarTrek ... and Priceline fame.

[0] [https://en.m.wikipedia.org/wiki/Clangers](https://en.m.wikipedia.org/wiki/Clangers)

</comment></comment></comment><comment><USER18> I first heard of the Mellotron when trying to track down some unique-sounding music I first heard in a pocket83 YouTube video.[1] Found out a Mellotron was used after googling a bit and seeing their albums show up on a Mellotron review site.[2]

After emailing the band via the contact email on their website multiple times with no response, I still have yet to find a way to buy the music. Regardless, it's an interesting sound!

[1]: [https://www.youtube.com/watch?v=nxde5KX3zjA](https://www.youtube.com/watch?v=nxde5KX3zjA)

[2]: [https://www.planetmellotron.com/revs11.htm#sklenik](https://www.planetmellotron.com/revs11.htm#sklenik)

</comment><comment><USER19> If you want to build one, string together a bunch of tape players: [https://youtu.be/Gx-TE_aapDQ](https://youtu.be/Gx-TE_aapDQ)

<comment> jim-jim-jim I think Peter Christopherson of Throbbing Gristle/Coil fame built something similar back in the day.

<comment><USER19> Correct. Mike Walters' page also mentions this under the "Update 10-18-05" section: [http://www.mysterycircuits.com/melloman/olmelloman.html](http://www.mysterycircuits.com/melloman/olmelloman.html)

</comment></comment></comment><comment><USER20> The use of the mellotron by Genesis (Tony Banks) is notably remarkable in their "Selling England By the Pound" and "The Lamb Lies Down on Broadway" albums. Listen for example to the choirs in [https://www.youtube.com/watch?v=bxTS_NZOIlg](https://www.youtube.com/watch?v=bxTS_NZOIlg) and the strings in [https://www.youtube.com/watch?v=SD5engyVXe0](https://www.youtube.com/watch?v=SD5engyVXe0)

[https://www.planetmellotron.com/revgenesis.htm](https://www.planetmellotron.com/revgenesis.htm)

<comment><USER21> Another notable example of is the introduction to The Beatles - <USER2> Fields Forever

[https://www.youtube.com/watch?v=HtUH9z_Oey8](https://www.youtube.com/watch?v=HtUH9z_Oey8)

Mellotron for use as strings is sort of a staple for Beatles inspired artists, see many tracks by Elliott Smith on XO and Figure 8 as an example. Also see Radiohead OK Computer as it is on many tracks.

All the non-linearities with the tape playback gives them a really unusual quality.

<comment><USER22> Paul McCartney showed the Mellotron and its original presets at a live concert at Abbey Road Studios more than a decade ago: [https://youtu.be/TUcfB5Whp4I](https://youtu.be/TUcfB5Whp4I)

Amusing.

</comment></comment></comment><comment><USER12> I'd love to own one someday. I've been playing a of UVI/Arturia modelling/sampled stuff and there are fairly decent Mellotron instruments in there.

<comment><USER23> Just wanted to mention G-Force M-Tron as well. They've added a number of libraries uncovered from Chamberlin and Streetly Electronics tapes.

[https://www.gforcesoftware.com/products/m-tron- pro](https://www.gforcesoftware.com/products/m-tron-pro)

</comment></comment><comment><USER24> That's funny, my brother actually restores these, as well as Rhodes, Wurlitzer, and some of the other vintage electric keyboards. People were very creative about making electric instruments before digital.

Plug: [https://www.facebook.com/ElectricPianoCo/](https://www.facebook.com/ElectricPianoCo/)

</comment><comment><USER25> Some people say Mellotron's 1963 product was a complete rip-off from Harry Chamberlin and his instrument (the Chamberlin) created in 1949. The instruments are identical.

[https://www.youtube.com/watch?v=LDbNeW9vpBg](https://www.youtube.com/watch?v=LDbNeW9vpBg)

<comment><USER26> Could you link an non-sexualised clickbait alternative? :\

</comment></comment><comment><USER27> Also worth checking out is the crudman [http://www.crudlabs.org](http://www.crudlabs.org)

Similar to the mellotron it is a synth voiced by tape playback, but implemented through clever recycling of old voice recorder walkmans.

</comment><comment><USER28> I believe that Add N to (X) used one in the intro to _Revenge of the Black Regent_

[https://www.youtube.com/watch?v=ZO1mLmgDW4A](https://www.youtube.com/watch?v=ZO1mLmgDW4A)

</comment><comment><USER29> I prefer this classic demo from 1965: [https://www.youtube.com/watch?v=HdkixaxjZCM](https://www.youtube.com/watch?v=HdkixaxjZCM)

</comment><comment><USER30> I was expecting to see this channel's previous upload[0] instead. This other video shows off what happens inside the mellotron when keys are pressed. It's pretty neat!

[0] [https://www.youtube.com/watch?v=VsEso9JagdQ](https://www.youtube.com/watch?v=VsEso9JagdQ)

<comment><USER31> I found this slightly older video a bit better: [https://www.youtube.com/watch?v=ByD8gH7kYxs](https://www.youtube.com/watch?v=ByD8gH7kYxs)

<comment><USER32> That one is _much_ better! Thanks for recommending it.</comment></comment></comment>


Yahoo Introduces Password-Free Login – Just Don't Lose Your Phone - <AUTHOR> http://techcrunch.com/2015/03/16/yahoo-introduces-password-free-login-just-dont-lose-your-phone/ <comment><USER2> Good old one-factor authentication.

The huge problem with this (and I hate even saying this out loud) is stealing phone numbers.

If I really wanted to hack your account, I would just port your phone number. I won't give the details how, but let's just say it's not yet a perfect system.

The number would get ported elsewhere, your phone company would probably assign you a new number (or your phone stops working until you call them).. the attacker would login, do whatever, and then in the next day or two when you realize your phone has a different phone number.. it would be way too late.

You'd likely even have a very difficult time getting your account back, since you no longer have your phone number.

Not only that, but now your entire life is messed up slightly because nobody knows your phone number.

We haven't seen too much of this yet, but I expect that to change. Thanks yahoo.

</comment><comment><USER3> I don't want Yahoo to know my mobile number. My bank has it because I trust them and because they use it as one factor in a two factor authentication sequence.

What about people who use more than one email account, perhaps one that they need to keep quiet about? Forcing such people into using a mobile for authentication puts them at greater risk in the real world.</comment>


Show HN: A collection of professional resume templates on Google Docs - <AUTHOR> https://www.visualcv.com/www/google-docs-resume-templates?locale=en

<comment><AUTHOR> We spent some time to create a collection of well designed resume templates for Google Docs. They are all completely free to use, hopefully you guys will find them useful.

If you guys have any suggestions of what kind of designs you'd like to see in the future. let me know.</comment>


Ask HN: Could you be my co-founder? - <AUTHOR>

Hello everyone!  You've probably seen all of my questions regarding my startup that I want to get off the ground.
Anyhow I have come to realize that my web design and marketing abilities are not my strong point, so what I am offering is an opening to one talented person who has the following qualities:
- strong design and marketing abilities - driven to succeed - past success in a startup - has equity to invest in marketing materials as I have and will dedicate all my time and resources to the continued development of the project. - smart and outgoing
to apply for 20% ownership send me your resume, examples of sites you have designed as well as any other information you think will help me with my decision.
Send All inquiries to mikecurry74 at gmail dot com.
Forgive any grammar as I am on my iPhone :) - <comment><USER2> Why only 20%? If its just starting, why not 50/50?

<comment><USER3> I agree that I think you need traction, or to talk about what progress that has been made to really give away only 20% equity.

I do wonder if you're just looking for a free/cheap web designer or really looking for a partner. This poster is giving away free web design, maybe start with that:

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

</comment></comment><comment><USER4> You really can't find a web designer who can't wait until the you're making money to be paid? Hell, I'll do it- for sure. There's so much software out there to build web sites, most designers have knocked prices down to around $500 for a 30 page / 500 product e-commerce site right now. With full proper design & templating. If you can't find a deal like that in the states, contract it up here to Canada- no such thing as a border when it comes to designing web sites.</comment>


Are flamingos pink because they eat shrimps? (2001) - <AUTHOR> http://www.straightdope.com/columns/read/2305/are-flamingos-pink-because-they-eat-shrimps

<comment><AUTHOR> For once, an article title that defies Betteridge's law!

<comment><USER2> If you look in the archive you'll see that many of the questions are answered with "yes". Perhaps a qualified yes, but still a yes.

"Is animal testing still common?" \- "So yes, animal testing is, unlike the animals themselves, alive and well."

"Is there a case for legalizing prostitution?" \- "We need to protect the women involved to the extent we can and not just drive them underground. If that means decriminalization plus inspections, licensing, and other bureaucratic accoutrements, spare me the moralizing — that's what we should do."

"Has anyone gotten hurt or killed following bad GPS directions?" \- "A Senegalese man driving through Spain wasn't so lucky. He was following GPS directions at night when the road just ended, his passenger said later. He drove into a lake and drowned."

While I think more are answered with "no", it's not rare enough to be a shocking surprise.</comment></comment>


Level-Up Your Machine Learning - <AUTHOR> http://metacademy.org/roadmaps/cjrd/level-up-your-ml <comment><USER2> I think this is fantastic advice.

As someone who has spent an embarrassing amount of time on various independent education, one of the key things I've taken from it is just how efficient text books are. Not only can you read more quickly than people can speak, but it's also active by nature. I've often found my attention wandering during videos, but it's just not possible to read without putting in a minimum amount of focus. It's also a lot easier to modulate your reading speed based on how easy material is for you than it is to do the same during a lecture video.

Some general thoughts on MOOCs:

Coursera and edX tend to be great for small, self-contained topics and the automated graders for programming assignments is great as well. The forums are also useful, though not ideal (since there are no practice questions students can get help with that don't fall under the honor code).

Where modern MOOCs really fall down is prerequisites. It's surprisingly difficult to do something like structure an entire CS degree from Coursera classes. Though many classes are taught by famous CS professors, they are from different institutions that break material into courses in different ways. Worse still a lot of the classes are either watered-down or shortened or both.

MIT's Open Courseware archives are actually a lot better for this. There are no certificates, and no credentials, but nearly all the material is freely available. The one biggest inefficiency though, is all the time spent in the lectures. At least they can be played back at a higher speed, but the lectures really do take a lot more time and cover less than the textbooks. For courses that have good textbooks, I think the best approach is to skip the lectures except in portions where you feel like you need more review.

Finally Khan Academy is fantastic for answering specific, mechanical questions (e.g. how to calculate eigen values), but a bit light on material. I'd use it as a supplement for the other resources.

<comment><USER3> I tend to watch lectures at 2x or 1.75x speed, and I tone it down for more difficult stuff, or pause, or rewatch. I think at 2x it's pretty even with how fast I can read, maybe even a bit faster. Modulating it isn't perfect but it's workable. Also, I struggle very hard to pay attention to almost any lecturer, my mind drifts very quickly and takes a while before I realize it's drifted. But at 2x I find my ADD is mostly defeated.

<comment><USER4> I also watch at 2x speed. I do the same for audiobooks. Your brain adapts. Sometimes I play them in 1x speed just for a bit and it sounds like extreme slow motion, and I think, people really listen to this?

</comment></comment></comment><comment><USER5> I love textbooks and spend more of my childrens' inheritance on them than I should.

But what MOOCs give me is the _exercises_. I often think I understand a problem, but it's only after getting 2.1/10 on a Coursera quiz that I realize I've missed a key step or concept.

Many textbooks have exercises but few have solutions. I've been working through Barto and Sutton's Reinforcement Learning for example (again), and although I do the exercises and programming questions, I never know if I've gotten it _right_. My experience with MOOCs shows I probably haven't in a large number of cases.

The best of both worlds is when I can follow a MOOC with the textbook to gain more depth, for example with the PGM course on Coursera.

<comment><USER6> Incidentally, I liked Barto and Sutton's book, but it feels a bit dated. Does anyone have another reinforcement learning book to recommend?

<comment><USER7> I chatted with Rich Sutton recently and he said he was writing and update - not sure how far along in the process he is though.

Also Csaba Szepesvári (a colleague of Rich's at the U of A) has a free RL book you can download. [http://www.ualberta.ca/~szepesva/RLBook.html](http://www.ualberta.ca/~szepesva/RLBook.html)

<comment><USER8> Csaba's book is the most up-to-date on RL I know of. Sutton and Barto is very old by now. For the POMDP side of things there are no recent books I know of, but [http://www.cs.mcgill.ca/~jpineau/files/sross- jair08.pdf](http://www.cs.mcgill.ca/~jpineau/files/sross-jair08.pdf) is a recent enough survey.

A related book is "Regret Analysis of Stochastic and Nonstochastic Multi-armed Bandit Problems" which you can find at [http://www.princeton.edu/~sbubeck/index.html](http://www.princeton.edu/~sbubeck/index.html)

The bandit problem is very strongly related to the reinforcement learning problem, so you'll get some mileage out of studying bandits. Be aware this area is very maths heavy, which is good or bad depending on your background. If you like you like this stuff, also checkout "Prediction, Learning, and Games" which deals more with the "adversarial" setup.

</comment></comment></comment></comment><comment><USER9> Two free books that I haven't seen mentioned, that are from more of a stats perspective

* James, Witten, Hastie, and Tibshirani's _An Introduction to Statistical Learning, with Applications in R_

[http://www-bcf.usc.edu/~gareth/ISL/](http://www-bcf.usc.edu/~gareth/ISL/)

* Hastie, Tibshirani, and Freedman's _Elements of statistical learning_ (more advanced)

[http://statweb.stanford.edu/~tibs/ElemStatLearn/](http://statweb.stanford.edu/~tibs/ElemStatLearn/)

</comment><comment><USER10> PGM is a tough book. I'm not sure it's the right book for "level 3" unless you want to be a level-3 who is good at PGMs.

The problem with ML is there are so many different kinds. Bishop's book is a decent light weight survey, but it doesn't come close to covering all the interesting fields. You could read that and Hastie/Tibshirani's book and still know almost nothing about online training (hugely important for "big data" and timeseries), reinforcement learning (mentioned, but not in any depth), agent learning, "compression" sequence predicting techniques, time series oriented techniques (recurrent ANNs for starters, but there is a ton to know here, and most interesting data is time ordered), image recognition tools, conformal prediction, speech recognition tools, ML in the presence of lots of noise, and unsupervised learning. I don't own PGM, but it probably wouldn't help much in these matters either. I know guys who are probably level 4 at machine learning who don't know about most of these subjects. On the other hand, Peter Flach's book "Machine Learning" at least mentions them and makes pointers to other resources.

"Deep learning" is becoming kind of a buzzword for a big basket of tricks. I think it's worth knowing about drop-out training, and the tricks used to do semi-supervised learning, but the buzzword is silly. Technically "deep learning" just means "improved gradient descent." I figure level-4 is anyone making progress coming up with new techniques.

That said, reading good books is one way to make progress. Knowing the right people is the other way.

<comment><USER10> aaaand, after a late night coding session, this turned into a 2000 word tirade which might be of interest: [http://scottlocklin.wordpress.com/2014/07/22/neglected- machi...](http://scottlocklin.wordpress.com/2014/07/22/neglected-machine- learning-ideas/)

</comment></comment><comment><USER11> PRML is great. I haven't read PGM, but I took a relatively intensive course on it which had great lecture notes. Which I'd like to also suggest—lecture notes are often "skeletal books" which can bring you up to speed on a topic quickly given that you (a) are willing to work a bit more and (b) can fill in the missing fleshy bits with your own experience.

I'd also really like to suggest DGL ([http://books.google.com/books/about/A_Probabilistic_Theory_o...](http://books.google.com/books/about/A_Probabilistic_Theory_of_Pattern_Recogn.html?id=5uCTngEACAAJ)) and Bickel and Doksum ([http://www.amazon.com/Mathematical-Statistics-Basic- Selected...](http://www.amazon.com/Mathematical-Statistics-Basic-Selected- Topics/dp/0132306379)). These are two of my _favorite_ core ML/stats books.

</comment><comment><USER12> There are some (free) good books that haven't been mentioned yet:

1) "Data Mining and Analysis: Fundamental Concepts and Algorithms" by Zaki and Meira [http://www.cs.rpi.edu/~zaki/PaperDir/DMABOOK.pdf](http://www.cs.rpi.edu/~zaki/PaperDir/DMABOOK.pdf)

This book covers many ML topics with concrete examples.

2) "Computer Vision: Models, Learning, and Inference" by Simon Prince: [http://web4.cs.ucl.ac.uk/staff/s.prince/book/book.pdf](http://web4.cs.ucl.ac.uk/staff/s.prince/book/book.pdf)

Despite a CV book, the first half of it is like a statistics book that comes with examples in CV which are very easy to follow.

</comment><comment><USER13> I would also suggest K. Murphy's Machine Learning for the journeyman level. In the intermediate apprentice-journeyman level Alpaydin's Introduction to Machine Learning is very friendly.

<comment><USER14> I second the recommendation of Murphy. It's very comprehensive and well written.

[http://www.cs.ubc.ca/~murphyk/MLbook/](http://www.cs.ubc.ca/~murphyk/MLbook/)

</comment></comment><comment><USER15> Form my own journey I would say that a good place to start for graphical models might be "Bayesian Reasoning and Machine Learning" by Barber. It's free ([http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=...](http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.Online)). I haven't read through it, but I've heard good things. However, it doesn't cover some basic things like SVM, RVM, Neural Networks...

For those I'd suggest "Pattern Recognition and Machine Learning" by Bishop. I've read throughout this and it's really well organized and thought out. For more mathematically advanced ML stuff I'd suggest "Foundations of Machine Learning" by Mohri. For a good reference for anything else I'd suggest "Machine Learning: A Probabilistic Perspective" by Murphy. For more depth on graphical models look at "Probabilistic Graphical Models: Principles and Techniques" by Koller.

On the NLP front there's the standard texts "Speech and Language Processing" by Jurafsky and "Foundations of Statistical Natural Language Processing" by Manning.

I also like "An Introduction to Statistical Learning" by James, Witten, Hastie and Tibshirani.

<comment><USER12> I skimmed over Mohri's book and I think the topics it covers are quite narrow.

For mathematical foundations of ML, I would recommend the book "Understanding Machine Learning: From Theory to Algorithms" by Shai Shalev-Shwartz.

A brief version of the book is available to download on the author's website: [http://www.cs.huji.ac.il/~shais/Handouts.pdf](http://www.cs.huji.ac.il/~shais/Handouts.pdf)

<comment><USER16> Yes, Mohri's book takes a strong learning theory approach.

At the same time, it's the only book I've seen that covers online learning well. Can you think of any others?

</comment></comment></comment><comment><USER17> Great recommendations, some people might also find this interesting as a general guideline to "Data science" [http://nirvacana.com/thoughts/becoming-a- data-scientist/](http://nirvacana.com/thoughts/becoming-a-data-scientist/)

[edit] scroll down and look at the map.

</comment><comment><USER18> What I'd really appreciate is ideas on how to learn or review the core math concepts. I haven't actually _done_ any multivariable calculus, vector/matrix calculus, or linear algebra in _years_ , even though I took them in undergrad.

</comment><comment><USER19> Wholeheartily agree with the author's sentiments on the value of textbooks. Not because of the medium itself, but because they're (usually) accompanied by well thoughtout examples and practice problems.

When initially starting a dense subject such as PGM, having my hands held through the introductory material with incremental practice problems as the topic elaborated, helped me get a much more intimate grasp. Initially only reading superficially and watching lectures, I kept getting stumped trying to form a cohesive mental map of all the interleaved concepts.

</comment><comment><USER20> What are the HN community's thoughts on Learning from Data by Abu Mostafa, Magdon-Ismail and Lin ([http://amlbook.com/](http://amlbook.com/))? The lectures from their course are here: [http://work.caltech.edu/lectures.html](http://work.caltech.edu/lectures.html)

I haven't started it yet, but this book was recommended by some folks at my company.

<comment><USER21> I really liked it - it was a lot smaller than I thought it was going to be (I didn't look at the page count) but they definitely explain some really import core ideas in ML like bias/variance tradeoff, curse of dimensionality, etc. in a clear way.

<comment><USER21> important _

</comment></comment></comment><comment><USER22> I'm in the middle of PGM right now. It's actually really easy to follow if you put some time into it. I'm reading PRML next. I didn't realize there was a 'path' to learning ML though, thanks for that.

We could use some more ML recs on [https://books.techendo.com/](https://books.techendo.com/)

</comment><comment><USER23> I would like to start my ML Journey in Python, then get to R.

How about learning things in python? Good recommendations?

<comment><USER24> If you go Python, you could start here: [http://nbviewer.ipython.org/github/ptwobrussell/Mining- the-S...](http://nbviewer.ipython.org/github/ptwobrussell/Mining-the-Social- Web-2nd-Edition/tree/master/ipynb/)

</comment></comment><comment><USER25> For a really nice introductory book, try "Machine Learning" by Tom Mitchell.

</comment><comment><USER26> Textbooks? Really?

How about start with a great lecturer like -

Nando de Freitas - [https://www.youtube.com/channel/UC0z_jCi0XWqI8awUuQRFnyw](https://www.youtube.com/channel/UC0z_jCi0XWqI8awUuQRFnyw)

David Mackay -[http://videolectures.net/course_information_theory_pattern_r...](http://videolectures.net/course_information_theory_pattern_recognition/)

or the (sometimes too dense) Andrew Ng - [https://www.coursera.org/course/ml](https://www.coursera.org/course/ml)

<comment><USER27> _> 'Textbooks?'_

The article addresses this almost immediately.

It's fine to disagree, but crapping a _' Really?'_ plus some contextless links onto someone who put forth general reasoning for the nature of the recommendations and spent 1300+ words describing expectations, key takeaways and projects for those recommendations is just lame.

<comment><USER26> On a given topic, I believe the best textbook is an inferior medium to the best lecture. Rather than blathering for 1300 words, I provided links to some excellent machine learning lectures.

<comment><USER28> You sound like you've had some bad experiences with books. If you learn better with lectures, great. However, it's not for everybody -- I personally think spending time away from the computer (until I'm programming something), with a book, paper and a pen is very good time spent.

<comment><USER29> I read textbooks on my computer actually. Not by choice though, textbooks are difficult to find and too expensive.

I used to hate lectures when I was in school but now I sort of prefer them. It's easier for some reason. It's more passive; you just sit there and listen rather than actively read. It doesn't seem to be slower like others complain, and may even be faster. I read difficult texts very slowly and methodically, and often have to reread stuff.</comment></comment></comment></comment></comment>


MIT OCW – A 500-Donor Challenge for OCW - <AUTHOR> https://crowdfund.mit.edu/project/11656/wall <comment><AUTHOR> I learned a number of great courses in MIT OCW and it deserved donation from me. If you guys have enjoyed learning from OCW, we could raise a little fund on the page.</comment>


Ask HN: Javascript debugger for IE? - <AUTHOR>

I've been looking around for a while but I can't seem to find an up to date debugger for IE6/7/8. All recommendations referenced the MS Script Editor, but that is no longer available for download. Any other JS engineers know of a solution for debugging in IE? <comment><USER2> I'm curious why you'd need such a thing. Are you dealing with a bug that shows up in IE but not in Firefox?

<comment><AUTHOR> Yeah, I am. I'm currently having to deal with a horribly written java component library called Richfaces here at the office and I'm getting "missing object" errors in IE on one of their controls. Trying to identify where its originating from so I can bash it. I hate java, hate this framework because of the horrible front-end code it produces, and just glad I don't use this crap in my own projects.

</comment></comment><comment><USER3> There is a "lite" version of Firebug that works in IE.

<http://getfirebug.com/lite.html>

Would that suffice? I haven't used it. At a quick look, it doesn't appear to enable the debugging features may be after, but I'll mention it just in case.

(I'm no expert in this.)</comment>


"Startup Advice", a live class by Sam Altman, tomorrow (2/21) 1:00pm PT - <AUTHOR> https://courses.platzi.com/blog/startup-advice-live-class-sam-altman/ <comment><USER2> Hi, I'm one of the founders of Platzi. We're really excited to have Sam teaching a class on our platform. It's really different to learn with live classes instead of just videos.

We've been doing this in spanish for a couple of years and this is first english class. Please let us know if you have questions / suggestions or a terrible bug we missed.

<comment><USER3> It is never cool to request sign in via Twitter and reserve the right to post tweets yourself on someone else's account.

Never

<comment><USER2> Oops, we'll fix it right now.

Edit: And it's fixed rmason :)

<comment><USER4> I'm a bit confused about the sign up. Do you just login at 1pm PT and everyone (lol) gets in?

<comment><USER2> Go here logged in: [https://courses.platzi.com/classes/startup- class/](https://courses.platzi.com/classes/startup-class/)

Do you see the countdown?

</comment></comment></comment></comment></comment><comment><USER5> Platzi guys on [https://courses.platzi.com/classes/startup- class/](https://courses.platzi.com/classes/startup-class/)

Typo on "How to operate, raise, talk to investors and _creat_ a great company." Please fix.

Also ...not cool on the Front Page of a high visibility event.

<comment><USER2> And it's fixed. Thanks a lot suprgeek.

<comment><USER6> otros mini-typos: published, is awesome.

"All our classes are recorded and plublished. But the live experience it's awesome."

<comment><USER2> That one took a while, but I think it's fixed now. What do you think?

</comment></comment></comment></comment><comment><USER7> What start up did Sam Altman found and how did it go?

<comment><USER8> I just googled "Sam Altman" and among the top few links was the Wikipedia article:

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

I then read that and it answered your question plus extra. i recommend the same technique for most other topics. Very fast, self-serve, great for FAQ- prone facts.

</comment></comment><comment><USER9> Alternatively, today at 2pm and with much more content: the Female Founders Conference

[http://www.femalefoundersconference.org](http://www.femalefoundersconference.org)

</comment><comment><USER10> Also it would be nice to see the class in different timezones. I don't like calculating in my head and being wrong which happens more often. seems good though. thanks

<comment><USER2> Here you go: [https://courses.platzi.com/schedule/](https://courses.platzi.com/schedule/)</comment></comment>


Tindie: Hardware marketplace, 1 year later - <AUTHOR> http://blog.tindie.com/1-year-later.html

<comment><USER2> interesting, haven't heard about this. browsed through the website and it is really good. looks like hackaday market place. really interesting.</comment>


How do people with title Full stack developers get front-end/back end jobs? - <AUTHOR> Considering a person is a full stack developer and he applies for a Frontend or a Backend role. How does he justify his experience in Front end/backend as he has done both together? <comment><USER2> It boils down to focus. When you present skills/experience that aren't relevant to what someone is hiring for, it distracts from your main message ("I can do this job well, pls hire") and leaves your audience unsure of what you'd be a good fit for.

A fullstack developer on the job hunt should have versions of his/her resume that are tailored for front end, back end, and fullstack. The front end and back end resumes should demonstrate a clear focus on the relevant responsibilities. That's not to say he/she should lie or exaggerate. All it takes is leaving off the impressive experience/skills that aren't relevant. It seems counter intuitive, but the idea is to present oneself as a specialist. For whatever reason, people are suspicious when others claim to be skilled at multiple things

</comment><comment><USER3> My take is that full-stack devs are proficient in frontend, backend and sysadmin work. Therefore they are well equipped for either of these roles. To convince the potential employer, I would focus on describing the specific part of my previous work - say, describe my past projects in terms of the frontend tasks, showing proficiency in this area.

<comment><USER4> > My take is that full-stack devs are proficient in frontend, backend and > sysadmin work.

If you're expected to know frontend, backend, and syadmin/devops, how are you supposed to be good at any of the above? You can either be a generalist or deep dive, but there are only so many hours in a day.

<comment><USER5> I think the main thing is to strive to be a T shape developer. Get general experience in all three areas but then get deep experience in at least one of them. So if you only have deep experience in the back end and general in the front end, that gives you an edge over other candidates that don't have the general experience when applying for a back end position

</comment></comment></comment><comment><USER6> I haven't found any backend developer that has labelled himself/herself "fullstack". In my country, so far the "fullstack" developers i've seen are the JS frontend guys that learnt how to do server dev in Node.js.

A backend dev is usually higher paid than a frontend, so it makes sense.

<comment><USER7> I don't get why Node.js is looked down upon in respect to other server technologies. I have worked on Rails and Node apps, and just started a new job working with Scala/Play framework. Node paired with Nginx has been the easiest to start new projects on, develop on, and it is more performant than the other two.

<comment><USER8> > _Node paired with Nginx has been the easiest to start new projects on, > develop on, and it is more performant than the other two._

Very true compared to what I've worked with before too. I come more from a background in backend programming (but typically label myself "full-stack") and recently did my first Node.js project -- getting it live with Nginx took like 20 minutes. That was a pleasant surprise compared to my first experiences with something like Django, for example.

</comment></comment></comment><comment><USER9> Write two resumes, one tailored for each. And then use the relevant one when applying to jobs.

<comment><USER10> When I job hunt, I usually have 2-3 resumes and template cover letters for front end / full stack / software engineer. They highlight professional experiences most appropriate whichever role they're for.

</comment></comment><comment><USER11> A bit off-topic: is only my experience or usually full stack developers are paid less than a frontend/backend engineer ? seems like full stack developers are seen as generalist and so paid less.

<comment><AUTHOR> I am observing that I am getting much more opportunities once I have changed my role from full stack to front end developer. I think recruiters want experts in one field rather than generalists.</comment></comment>


GDriveFS – FUSE wrapper for Google Drive - <AUTHOR> https://github.com/dsoprea/GDriveFS <comment><USER2> This is very nice, but probably not something I would use, mostly because I have been using Insync for years on all of my machines and it works perfectly for me.

Is there any use case for this FUSE wrapper that Insync doesn't support?

<comment><USER3> insync is not free</comment></comment>


XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks - <AUTHOR> http://arxiv.org/abs/1603.05279 <comment><USER2> Fantastic work. They do rely on floating point numbers for the weight updates (I was secretly hoping that they would have binarized gradient descent).

<comment><USER3> It can't work with gradient descent, which requires about 16 bits of precision. The problem is the gradients are small, and so are rounded down to zero. Then when added together they get zero, even though the number should be higher.

However it's been shown this can be solved by using stochastic rounding. But I believe that would require specialized hardware to implement. I'm not sure.

<comment><USER4> Can't you just store the logarithm of the value instead of the actual value?

Then rounding should be irrelevant.

<comment><USER3> Logarithms are both expensive to compute, and don't magically add any more bits of accuracy.

<comment><USER4> Well, (a) 2-based logarithms are cheap to compute, and (b) add quite some bits of accuracy if the alternative is rounding the value to 0.

<comment><USER3> They are not cheap to compute, I believe the best way to approximate them is using expensive polynomial approximation which consumes a few cycles and operations.

All they do is map the numbers into a different range. A logarithmic value can represent more numbers near 0, but in order to add two logarithms, they need to be converted back to normal form, where the small numbers are rounded down to zero again.

There's no way around that, as adding a very small number to a very large number will always require many bits of precision to do accurately, regardless what transforms you use on the numbers.

</comment></comment></comment></comment></comment></comment><comment><USER5> 58x speedup sounds great, the question that is unanswered here is wheter using more layers can get back the accuracy, and what kind of speedup can be achieved compared to the original version?

</comment><comment><USER6> Sounds interesting :-) But is there any Github repo or Dockerfile cook book available ? Last year, I have noticed these 2 repos: [https://github.com/kevinlin311tw/caffe- cvprw15](https://github.com/kevinlin311tw/caffe-cvprw15), [https://github.com/kevinlin311tw/Caffe- DeepBinaryCode](https://github.com/kevinlin311tw/Caffe-DeepBinaryCode)

How different are they ?</comment>