SG Mastermind 1: Build from scratch or use existing software? - <AUTHOR>

Dear HN I hope you don't mind me temporarily hijacking 2-3 threads (to use as mastermind sessions) for Startup Guild. No need to vote this up as folks will be arriving here directly from the SG mailing list. (It might actually be better if it can quietly slip off the new section causing as little fuss as possible!)
Dear SG: Should we build the main SG community from scratch, or use existing software?
Hopefully this mastermind thread will resolve this question within the next few days.
<comment></comment><comment></comment><comment></comment><comment></comment><comment>--
Working Spec (thx Scott)
</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>--
1) Forums/Blog Commenting: High lever conversations with the entrepreneur community at large (message board, divided into different topical areas that appeal to different types of entrepreneurs). Process for accepting new members to this community, like verifying their identify and having their posts associated with their real names. I'd also consider walling this off from the public.
2) Private Mastermind Groups: Anyone can create a mastermind group which will have its own private forums. Anyone seeking to join a mastermind group will be subject to a unanimous vote.
a. Include some basic tools to facilitate offline meetings, and (digitally?) signing NDA's and optional non-competes (each mastermind group can set policies on which docs must be signed)
3) Robust bio pages: Detailed social proof section, Game Mechanic Badges, Give/receive endorsements, detailed bios, ability to follow people's activity, etc
Note: Game mechanic badges. [$1k/month] [1000/users] etc.
</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-
Existing Software Possibilities (Can they do it?)
</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-
- http://www.ning.com/
- http://buddypress.org/
- http://vanillaforums.org/
- (Know any others?)
</comment><comment></comment><comment></comment><comment>
Build From Scratch
</comment><comment></comment><comment></comment><comment>
- Who?
- Pay for it?
- Build as open source tool?
- Extend buddy press?
Please chime in, SG needs you! </comment><comment><USER2> First off, I LOVE the idea. I think serial entrepreneurs like myself NEED this and it will grow into a thriving community of benevolent contributors (and hopefully less flaming)

while I think it would be great to see it built from scratch putting it all in the hands of one person seems to be asking too much, then comes the question of who does the upkeep, who fixes the outages etc.

I think Open Source is probably the best way see this project through

Why not just start a git repository on github (private) and start a group on a site like fridge to discuss what's going on/have the beginnings of the community while we all work on it together.

Anyone who forks the project and submits accepted code gets some sort of badge in their profile along with credit for helping and being a "founding member" so to speak.

Open a WePay group for the SG so donations can be accepted for server costs, hardware etc.

I think ultimately this can be a passionate community of people who do lots of good, who knows what can grow out of an idea like this. Let's take the time to do it right and make sure all who come can receive sound advice from seasoned professionals in a manner which is better for all parties

Zach

<comment><USER3> I think that if you're building a start up community, your goal is to engage talent in computer science across the country/planet. I don't think there is a better way to do that then to start from the very beginning as having it that people build together. Zach has probably the best idea so far.

I think adding advertisements to help reduce the costs along with donations would also be a good start.

</comment></comment><comment><USER4> I really think we should build the community first using one of the many tools out there before we start investing time into building something custom. Perhaps we can even use something like basecamp/campfire or talkerapp (I'm willing to pay for the initial costs personally).

The community is the important part but I think something as simple as a Google Group would be enough to prove that it's a community that will be worth being part of. Just my 2c.

<comment><USER5> Agree with grace 100%.

Also signing NDAs might turn people away. I would try to be as casual and organic with this as possible to start with.

<comment><USER6> Also agree with grace. A simpler way to create and engage community (Google Groups, Posterous Groups, ...) may be enough for the early alpha stage.

About the software, I'd usually go with the "use existing software" approach. However, with the specs outlined (game mechanics and so on) there's also a big risk on ending creating a big patch "hacking" the existing software.

A third option in between would be to use some kind of framework as Django (or Ruby) with as much already done apps for the functionality as possible. For example, a comparison page for forum appz solutions on Django: <http://djangopackages.com/grids/g/forums/>

<comment><USER7> I think the alpha stage option is a good point. Get things moving asap with Google/Posterous Groups, and then turn some attention to a custom site including the desired features.

</comment></comment></comment></comment><comment><USER8> Use existing tools and as (if) the idea gains traction then consider building tools meeting it's specific needs. There's momentum here, capitalize on it by getting people engaged as opposed to spending a month or two building out a site. You may not have the momentum a month from now!

How about stack exchange? There exists one for onStartups that's pretty good. I'm not suggesting using their community but there's probably a ton we could learn by looking at their questions and answers.

</comment><comment><USER9> I would recommend Wordpress/Buddypress to start. It's simple to setup, has a ton of plugins, and isn't hard to extend. If not BuddyPress, use something else existing. Building your own software from scratch would be a terrible use of your time given the goals you have for the Startup Guild.

</comment><comment><USER10> I say focus on the structure of the "program", then take specific votes on the details. Do you want levels of members to roughly correspond with Y-Combinator's classes/timeline? The statuses could be: Applied (need social validation to get it), Level 1 (approximately 1 month into Y-Com), Level 2 (mo 2), Level 3, Alumni.

I definitely say use off the shelf software wherever possible. I also think there needs to be some kind of "voting off the island" type situation. Maybe of a given group that starts, only x-percentage can finish. Part of Y-combinator's appeal is that it selects positively for good companies. If it is completely open, you will loose some of this.

I agree that you will need some kind of identification walls in order to make people comfortable working within it, and to make it special. My company, signnow, has a product notarynow that I would gladly donate our service to solidly identify people, if you like.

</comment><comment><USER11> No brainer. Open source CMS. They are extensible and rich plugin markets. Current leaders are wordpress, joomla, Dotnet nuke, Umbraco and drupal, but there are many others. Word press has around 13,000 plugins for everything from ecommerce to social networks but all most all them have that.

One consideration is that dotnetnuke and umbraco target the enterprise so can be somewhat heavy weight. More modern CMSs are lighter weight. Orchard.net, for example is a .net mvc3 application whose core is very small and even the basic features are design as external modules.

</comment><comment><USER12> Existing (Open Source) tools at first for sure. Capture the audience, then extend and provide customized solutions / tools. I like zbruhnke idea as an initial project / mastermind group any one can join to get their feet wet if they dont already know a project or have one of their own they want to work on. But initially to get things started I think it would be best to use existing (open source) tools.

Once the choice of existing or new is made then the choice of technology / tools needs to be made. There are alot more existing solutions that meet the working spec needs in alot of differing technologies. So once the new/existing choice is made you really need to focus on tech (.Net, Python, Ruby, Java, etc) as this choice will help inform the number of potential contributers.

<ThoughsOnConcept> I see this working best kind of how Google did in the early days and how I hear facebook currently works. Developers post project pitches to try and gather other people (Devs, PMs Marketing, etc) to their idea, then working together to make it happen. All members of SG would be under a blanked NDA for pitch ideas and each project once started could have their own. </ThoughsOnConcept>

</comment><comment><USER13> Overall: My vote goes to using pre-existing tools like Google Groups, HN Userbase to get started

If a component of the existing tools requires a paying element, perhaps a very low joining fee could be in order. Taking money always changes how people react of course.

e.g. USD$1 to join --> $400 kitty to spend on a paid-hosted plan

.

.

If you _need_ to build something out, consider:

<http://pinaxproject.com/> A python and django OOtB framework

.

or Tiki... which has an awful lot of features that don't require writing code:

<http://info.tiki.org/Tiki+Wiki+CMS+Groupware>

.

They say:

        * Wikis (like Wikipedia)
        * Forums (like phpBB)
        * Blogs (like WordPress)
        * Articles (like Yahoo News)
        * Image Gallery (like Flickr)
        * Map Server (like Google Maps)
        * Link Directory (like DMOZ)
        * Multilingual (like Babel Fish)
        * Bug Tracker (like Bugzilla)
        * RSS Feeds (like Digg)
        * Free Open Source software (LGPL)

And much more...

        * all integrated (like no one else)

</comment><comment><USER14> The mere fact that you ask this question is usually an indicator that you should go with existing solutions. If you had a compelling reason in mind not to use off-the-shelf solutions, you'd not bother asking, and if you don't have a compelling reason in mind, why bother? This is obviously not always true, but is rather a general rule, but it's a good one to keep in mind.

</comment><comment><USER15> Don't start from scratch! That lesson is reiterated over and over.

Start as soon as possible with a minimum viable solution, get community growing, and the software solution will create itself based on real needs.

</comment><comment><USER16> I agree with the current majority. Use off the shelf software to get started.

My company uses an install of Wordpress with the GTD theme (P2 Theme is also an option) for communication - it is basically a twitter/yammer clone. We have 20 people and it has been an awesome tool. Of course you can easily add forums (bbpress) and a ton of other functionality with 10k+ plugins available.

This could be built/ready in 1-2 days.

<http://p2theme.com/>

</comment><comment><USER17> I think off the shelf is probably fine for the most part. Mailing lists, IRC, blogging are all available. Live with the limits they impose (embrace constraints!).

As for contracts and online signing, my current gig is with a startup here in Vancouver (BC) that's doing just that for small companies that might be useful if some people/groups did want to do NDA's or contracting/employment agreements, etc. (Not linking as I don't want to be too promotional ;)

</comment><comment><USER7> At this point, I'd agree with the 'off the shelf' solution that most are supporting here. Either starting with something like Reddit's code base, as suggested, or even the Google groups option could be a good start initially.

If the need/desire to roll your own becomes an issue, Kickstarter could be a good way to look at funding this, seeing as there are already 400+ people wanting to see this happen, who I'm sure would all happily pitch in.

</comment><comment><USER18> I don't know of any existing systems that offer everything you're looking for. Maybe we can start with something that meets most needs, and build on it? e.g., start with Reddit's code base.

Building from scratch would be less desirable, and risky -- in terms of potentially killing the project before it even launches -- but it would also get you exactly the package you want.

</comment><comment><USER19> I don't want in here to sound like an echo chamber, but building from scratch is not a good idea when there are so many open-source/free tools available that fill all the current needs. As the community feels itself out the need for specific features will arise and then it's time to look at extending and developing the existing deployment.

</comment><comment><USER20> This is great Justin, thanks for getting it together.

I vote for Open Source. I think everyone is champing at the bit to join and share with each other, so getting it off the ground fast is best.

Also, as others have already said, this seems to be a predominantly altruistic group, so funding a better solution later won't be an issue.

</comment><comment><USER21> As a general principle, I think the software platform should be off-the-shelf if possible - to contain costs and management resources. That said, the platform needs to do everything the group requires without too much tweaking.Maybe we could take the open-source remnants of Google Wave and build a customization from there?

<comment><USER14> If anybody managed to build something actually usable on top of the carcass of Wave, I would love them forever. That was easily one of my favourite "great, but not right now" ideas of recent times.

</comment></comment><comment><USER22> I'll add my 2 cents to the idea of using a pre-existent solution for the main community site.

And my vote goes for using buddy press and extend from it.

As others have said, it would be great to start this community opening up the space to code, design and ideas contributors from the very beginning.

</comment><comment><USER23> The main reason to purpose build is to have total control and address scaling issues that pop up with many out of the box solutions. But you may not need total control or have issues with scaling if you don't build a strong community.

I agree open source is probably the best solution at this stage.

</comment><comment><USER24> I completely agree with graceyang that the community is the important part. While it would be nice to have a custom tool, that adds months to the startup process full of debating how the tool should be made and what it should do.

</comment><comment><USER25> Start with BuddyPress or something else off the shelf you can customize later. You can leverage experience from the group on whatever solution you pick and the excitement you've started. I think it is imperative to move quickly.

</comment><comment><USER26> Def start with existing software.

Even a simple forum (Google group) could work. All the way up to stack exchange site (Q&A). Possibly <http://braintrust.io>

</comment><comment><USER27> It is most important to begin developing the community. Many communities have been formed using existing tools. Use them until the need for something new/different becomes apparent.

</comment><comment><USER28> I'd be happy to evolve <http://ongoingfeedback.com>, it currently already does private mastermind groups.

</comment><comment><USER29> I reckon make use of existing software first. Manual curation should be ok initially, if necessary. Automate and build as needed in the future.

</comment><comment><USER30> For a start up it would be good to build up from existing software like everyone before me has said and tweak around it to your liking.

</comment><comment><AUTHOR> UPDATE:

The Startup Guild now exists and is Live!

<http://bit.ly/e2vAee>

</comment><comment><AUTHOR> What do you think of <http://www.ning.com/> ?

</comment><comment><USER31> Convore?

<comment><USER32> Convore may be the best solution for right now...it's super easy to organize a public/private group of people, and the daily email digests are perfect.

When There's a clearer idea of the form the SG is going to take, BuddyPress is probably the best off the shelf solution since it's open source (free & constantly being improved) easy to set up (under 15 minutes now that it's a plugin) and easily customized with themes and plugins.

I've been using it for the past few months on client projects and it's been really awesome to work with, as well as easy to use for admins and users.</comment></comment>


Getting the Google+ Feed for any profile in JSON - <AUTHOR> http://www.reddit.com/r/googleplus/comments/iq21n/getting_the_google_feed_for_any_profile_in_json/

<comment><USER2> Nice, I wrote a similar scraper in NodeJS, which also delivers profile information: <https://github.com/fhemberger/googleplus-scraper/>

Are you interested in contributing?

<comment><USER3> Think I'd rather wait until the API is released.

</comment></comment><comment><USER4> Interesting. Does the user need to be logged in to G+ and a friend of the person you are requesting the feed for? Otherwise its a bit of a privacy bug!

Edit: Reading it again, it clearly states public posts only.

</comment><comment><USER5> A guy already did an RSS feed generator based on that JSON:

<https://github.com/russellbeattie/plusfeed> <http://plusfeed.appspot.com/>

<comment> mike-cardwell This strikes me as a massive waste of time. I would expect Google to release their own native RSS/Atom feed functionality in the not too distant future.

<comment><USER5> Hardly "massive" - his code is a single file with 108 sloc.

<comment> mike-cardwell It's not just the code base though obviously. It's the research time, the setting up of the repository, setting up of the hosting. And if you read the example feed (his own account), you find the following comment:

"Gah... spent a lot more time than I wanted to cleaning up the <http://plusfeed.appspot.com> feeds. GOOG will eventually just add them, I'm not sure why I went through the effort. Was interesting playing with Python I guess... and a little of Django too..."

<comment><USER2> Of cause, most Google+ tools will become obsolete by the time Google releases the official API. On the other hand, getting into it is a typical nerdy approach, that I love: Play around with the newest toys, see what can be done with them.

Personally, that's what drives me in this case: Learn something new, do some creative coding (without having to invest too much time like working on a 'real' project), provide something useful for those, who also already tamper with it, have fun. And maybe we stumble upon a useful idea, which can be extended, once the official API is out.

In my view, that makes it worth the effort.</comment></comment></comment></comment></comment>


Nurse arrested after refusing to let officer take blood from unconscious victim - <AUTHOR> http://www.sltrib.com/pb/news/2017/08/31/utah-nurse-arrested-after-complying-with-hospital-policy-that-bars-taking-blood-from-unconscious-victim <comment><USER2> _" Payne — who says he wanted the blood sample to protect the patient, not punish him"_

So, this man is in a hospital, supposedly being cared there, and the police wants to play doctor to protect him? Look like BS to me.

I also find the repeated use of _" unconscious"_ by the writer weird:

 _" blood cannot be taken from an unconscious patient unless the patient is under arrest, unless there is a warrant allowing the draw or unless the patient consents."_

makes it look as if blood could be taken from a conscious patient any time of day, regardless of whether he is arrested, consents, or a warrant exists.

<comment><USER3> The blood draw is for the police to check for driving under influence of alcohol or drugs (DUI) or driving while impaired (DWI).

It's a serious offense, and sounds like this this case could have caused a death, so there would be a criminal trial down the road.

You have a right to an attorney, and a right to not incriminate yourself.

If conscious, the patient would presumably reject a blood draw to avoid incriminating themselves.

If unconscious, the patient cannot provide consent, and should not be forced to incriminate themselves by giving blood.

Either way, the only way to compel self incrimination should be a judge's warrant, as it will likely become a point in a trial.

This is why they repeat unconscious so many times.

</comment></comment><comment><USER4> I'm starting to wonder if there's a single US cop that knows the law.</comment>


Ask HN: How did you first discover HN? - <AUTHOR> <comment><USER2> At any given time I track a half dozen people. They're bright and what they're saying really resonates with me. I read everything they write and watch any interviews that I can find.

After reading PG's essays he went on my list. I was really busy at the time so I was behind on my reading and didn't learn about HN's creation for 2-3 weeks. Joined when I did and it quickly became a daily habit.

</comment><comment><USER3> I think it was this article [https://techcrunch.com/2008/03/10/little-known- hacker-news-i...](https://techcrunch.com/2008/03/10/little-known-hacker-news- is-my-first-read-every-morning/)

</comment><comment><USER4> My oldest son introduced me to the writings of Paul Graham. I'm not quite sure how that got me to Hacker News, but that was the gateway.

</comment><comment><USER5> I wanted to see the Arc language in production after reading about it.

</comment><comment><USER6> I found it through my colleague.</comment>


Trump ordered Defense chief to 'screw Amazon' out of $10B contract, book says - <AUTHOR> https://www.cnet.com/news/trump-ordered-defense-chief-to-screw-amazon-out-of-10b-contract-book-reportedly-says/ <comment><USER2> Possibly, but there's also an historic antipathy between the DOD and CIA: the CIA has worked closely with Amazon building their datacenters and the NSA (part of the DOD) has worked closely with Microsoft in the past, especially with the construction of their San Antonio data center. When the deal was finalized for building the San Antonio Azure datacenter the NSA quietly approached the contractor and said "we'll have one of those too, right across the street from where you're building one for Microsoft."

<comment><USER3> Could you point to some references for further reading?

<comment><USER2> This goes back at least to the early 1960s and the Kennedy administration when Kennedy allegedly sought to dissolve the CIA and roll all intelligence activities into the Department of Defense. In more recent times, Bush Jr. tried to heal the DOD/CIA rift by putting for NSA director in as the CIA director. That didn't really go well.

[https://www.nytimes.com/2006/05/10/washington/10cambone.html](https://www.nytimes.com/2006/05/10/washington/10cambone.html)

</comment></comment></comment><comment><USER4> Title is a bit misleading,apparently James Mattis said he will not follow that order.

<comment><USER5> And then Mattis resigned 10 months ago due to frequent clashes with Trump. I do wonder if Trump ordered Esper to "screw Amazon", and if so how did/would he react.

<comment><USER4> True, but I kinda glad AWS doesn't have a monopoly vendor lockin on the US Gov and I am glad the alternative was not Google. With some of Trump's ridiculous orders like this one,I think they'll say "yes" at first and ignore his ordet knowing they can find an excuse if he follows up on the execution.</comment></comment></comment>


One Major Difference Between Clojure and Common Lisp - <AUTHOR> http://gilesbowkett.blogspot.com/2015/01/one-major-difference-between-clojure.html <comment><USER2> This doesn't seem like a useful comparison, analysis or conclusion. Clojure is philosophically a Lisp, but as others have pointed out, it isn't usefully the same language as any other Lisp that preceded it or exists today. If this particular example is useful to people who might otherwise think they could reuse existing Lisp code, then I suppose it's saved some effort, but that just seems like a straw man.

Either way, if you get the terminal condition of a recursive function wrong, you will blow the stack. It's true Clojure isn't built to do TCO, but that's a non-sequitur. The idea that you don't typically use recursion in Clojure is ridiculous - for is a macro, it's syntactic sugar over Clojure's recursion primitives, loop and recur. Even if you didn't want to use that, change the nil? check to empty? and it works. I'm not going to claim that Clojure's list/sequence semantics are necessarily the cleanest (the empty _sequence_ in Clojure is nil, an empty list/vector/set etc is not), but they're not hard to learn if you make any effort at all. Again, your existing Lisp experience may or may not help you understand Clojure's data structures, but I am surprised that this is a surprise to anybody.

<comment><USER3> In practice recursion is not something that you use that often I think. I've always seen it as a low level construct. The filter/map/reduce idiom or, alternatively, list comprehensions get you a long way.

Not to say recursion is not important. Without it lambda calculus is not Turing complete. But Clojure does provide explicit TCO. Saying this is a big difference is excessive IMHO.

<comment><USER2> Clojure does constant-space recursion with loop/recur, but doesn't/can't do TCO. I nevertheless use it a lot, YMMV.

</comment></comment></comment><comment><USER4> To make a statement about Common Lisp from simple tutorial code is a bit much.

If one looks at music software in Common Lisp, the code is on a higher level than building lists like that.

> Secondly, this code tries to handle lists in the classic Lisp way, with > recursion, and that's not what you typically do in Clojure.

Neither is it done in Common Lisp.

> Those 7 lines of Common Lisp compress to 2 lines of Clojure

The actual difference is that Common Lisp uses LOOP and not FOR, and that LOOP needs two nested LOOP forms:

        CL-USER 11 > (defun build (list1 list2)
                      (loop for e1 in list1 append
                            (loop for e2 in list2 collect (list e1 e2))))
        BUILD

        CL-USER 12 > (build '(1 2) '(a b))
        ((1 A) (1 B) (2 A) (2 B))

Two iteration forms in a LOOP don't nest, but provide iteration bindings similar to LET* and LET:

        (loop for i in '(1 2 3) for j = (expt i 2) collect (list i j))

and

        (loop for i in '(1 2 3) and j in '(1 4 9) collect (list i j))

Common Lisp's ITERATE macro also needs nested forms, but slightly improved over LOOP:

        ITER-USER 26 > (iterate outer (for i in '(1 2))
                         (iterate (for j in '(a b))
                           (in outer (collect (list i j)))))
        ((1 A) (1 B) (2 A) (2 B))

The author of Clojure knows these differences very well, since he was a heavy Common Lisp user for a few years.

> But, at the same time, if you're looking to translate stuff from other Lisps > into Clojure, it's not going to be just copying and pasting. Beyond > inconsequential, dialect-level differences like defn vs. defun, there are > deeper differences which steepen the learning curve a little.

That's true. Clojure is not a Lisp, but partially derived from it, with many other influences from Haskell and other languages. It's mostly incompatible to Lisp: software can't be shared or copied, it needs to be complete rewritten. Thus basic Lisp literature is only of use when it's about features which got copied. For example the book 'On Lisp' might help to understand macros in Lisp and Clojure, whereas books like 'Practical Common Lisp' or Norvig's PAIP aren't very useful for Clojure programmers.

<comment><USER5> > Neither is it done in Common Lisp.

LOOP is something that imho very controversial. I don't think it's fair to say that its use is idiomatic.

<comment><USER6> > LOOP is something that imho very controversial.

No, not really: it's as controversial as Common Lisp's Lisp-n nature (which is to say, both of which are controversial amongst Scheme programmers writing Common Lisp). It's a perfectly useful macro. ITERATE is a bit more traditionally Lispy, and is an easy library away if one wants it.

> I don't think it's fair to say that its use is idiomatic.

 _Not_ using it is typically less clear. It's part of the standard; it's more elegant than using other parts of the standard; it's idiomatic.

<comment><USER7> Eh, no, it was controversial when it was being developed in the early '80s, a lot of respectable Lispers didn't like it, thought it was too complicated and easy to get wrong. But Common Lisp also has simpler constructs like dolist that aren't, to my knowledge, "controversial", except of course as you note this paradigm isn't a Scheme sort of thing.

</comment></comment></comment></comment><comment><USER7> This is why I call Clojure a "Lisp", whereas I somewhat pedantically refer to previous languages in this family as "LISPs", as originally coined from "LISt Processor".

But it's still a Lisp, I went straight from old half-remembered mainline LISP and Scheme to Clojure in a recent small web server project without difficultly. The dynamic style of development is the same as is the typing, if you're not using lists, then the OPs problems don't come up (idiomatic Clojure web programming uses maps, key value pairs), the syntax is still s-expressions, albeit polluted by arrays denoted with square brackets where it makes sense.

And I believe the article is wrong in one sense, the JVM treats non-tail recursion like other languages, growing the stack. It's tail call optimization (TCO) that's the issue: mandatory in Scheme, don't know about its prevalence in Common Lisp implementations, and it's awkward in Clojure but wasn't much of a jump from SICP for the typical cases. And I think it might be a good idea to require signaling when you intend to tail recurse, it's easier and much quicker to find in compilation than when you blow the stack running it.

<comment><USER8> There's something very off about working with a lisp and not being able to inject stateful inline expressions for prototyping. In other lisps you find the fluid abstraction/computational nature of sexps holding up very nicely while in Clojure you find yourself having to rewrite larger portions of functions just to test or fix something. A lot of my turnoffs from Clojure is that it takes away the whole "geometrical logic glue" aspect of sexps and leaves behind what feels like a neutered stack-based language for the JVM in lisp's clothing.

<comment><USER7> Hmmmm; I haven't worked with Clojure enough, and that after a decade break from programming and several from serious LISP programming, but ... while I like it, I don't find it very tasteful in many ways, including that very sort of way. It's a language I like to program in, but not one I think I'll ever fall in love with like mainline LISP and then Scheme.

While I very much like the first class syntax for arrays, maps, and sets, there's a _tremendous_ advantage to having one main or even exclusive built in composite data type, e.g. I hear that a strength of Lua, which I gather has been very successful. LISP's DNA, as well as Scheme's I'm pretty sure, was established in the days when that was lists.

<comment><USER9> "While I very much like the first class syntax for arrays, maps, and sets"

Don't lisp advocates usually say it has no syntax.

<comment><USER10> Clojure explicitly makes '()' and '[]' different, as well as a few other delimiters. '(1 2 3) is a list like in Lisp tradition, but [1 2 3] is a vector. That is the syntax that the parent is talking about.

<comment><USER11> Yes, specifically [:whatever] is syntactic sugar for (vector :whatever) and {:what :ever} is syntactic sugar for {array-map :what :ever}. CL has the #() syntactic sugar for the first and the #'acons syntactic sugar for the second. So, in fact, Clojure is no more unLISPy than CL in the most quoted respect.

(Quote from CLtL: Many people have suggested that brackets be used to notate vectors, as [a b c] instead of #(a b c). This notation would be shorter, perhaps more readable, and certainly in accord with cultural conventions in other parts of computer science and mathematics. However, to preserve the usefulness of the user-definable macro-character feature of the function read, it is necessary to leave some characters to the user for this purpose. Experience in MacLisp has shown that users, especially implementors of languages for use in artificial intelligence research, often want to define special kinds of brackets. Therefore Common Lisp avoids using brackets and braces for any syntactic purpose.)

</comment></comment></comment></comment></comment></comment><comment><USER12> The conclusion of this article is: "Clojure is not the same as Common Lisp." Well, yeah, it's not the exact same language. How is this surprising?

I wish the author would have spent a little bit more time researching. The comparison is just plain sloppy. Why is Clojure's `recur` not mentioned, for instance? This is documentation that's not that difficult to find by googling, and is mentioned in (I believe) every Clojure book available.

<comment><USER13> To make a point, I thought about 'recur' and I haven't written a single line of Clojure in my life. In comparsion, CL's looping constructs were not mentioned, which crop up often enough.

</comment></comment><comment><USER14> From my perspective, the three distinguishing features of Clojure from other languages/Lisps in general are:

1\. It's a lisp, which means homoiconic, i.e. build software just like Lego (different from non-lisps)

2\. Immutability and purity in the core library + sane, managed concurrency via atoms, refs, core.async, i.e. write serious multithreaded code without putting your hair on fire; helps on the front-end via ClojureScript as well (different from most other Lisps)

3\. The JVM, which means very good performance in the general case + build once, run everyone + a lot of libraries

</comment><comment><USER6> The Common Lisp version he has is pretty poor; I think this is more idiomatic, and is two lines as well:

        (defun build (list1 list2)
           (loop for x in list1 append (loop for y in list2 collect `(,x ,y))))

or:

        (defun build (list1 list2)
           (mapcan (lambda (x) (mapcar (lambda (y) `(,x ,y)) list2)) list1))

Still more verbose, of course, but not at all bad.

</comment><comment><USER15> Lisp != Common Lisp. The very thought that you can cut-n-paste code from one Lisp dialect to another is daft. The author obviously didn't take the time to acquaint themselves with the basics of Clojure.

The lack of TCO in JVM hosted languages is besides the point.

It is also possible for the Clojure compiler to do TCO in certain cases: Rich Hickey made the conscious decision to not do it.

<comment><USER16> You can use the recur special form to enforce recursion from the tail position in Clojure.

<comment><USER4> True, but that's not TCO (or tail call elimination). That would mean that every single tail call is optimized to eliminate that stack overhead.

        (defun foo () (foo)) ;<- tail call

        (defun bar () (bar)) ;<- tail call

        (defun baz (a b) (+  ;<- tail call
                            (* a 2)
                            (* b 3)))

</comment></comment></comment><comment><USER17> For all the gripes surrounding the lack of TCO on the JVM, Clojure really does provide a great set of tools to deal with iteration in a functional way. It's a rare thing when I need to fall back to using loop & recur.

</comment><comment><USER18> This is not a Clojure problem, it's a JVM problem--no tail call optimization. Armed Bear Common Lisp has the exact same limitation.

<comment><USER19> And didn't tail call optimization only become standard in Lisps with the advent of Scheme?

In any case, at Standard Chartered we didn't have tail call optimization with our Haskell dialect either. It didn't matter too much in practice, because you should be using combinators anyway. And when you are calling foldr or map, you do not care that somewhere hidden away they are implemented with a loop in C++, as long as they behave right.

<comment><USER20> Yup. The CL spec does not require TCO. Some implementations only do TCO on self calls, so no mutual recursion.

And really i think the "Classic" lisp way to loop is loop, not recursion.

Scheme forces the point and requires full TCO.

<comment><USER4> Most CL implementations will do more TCO than on self calls or mutual recursion. Most support full TCO, with language limitations.

The ones that don't provide any form of TCO are old Lisp Machine implementations and ABCL on the JVM.

SBCL, OTOH, provides full TCO.

Some older overview about Common Lisp implementations and their TCO support:

[http://0branch.com/notes/tco-cl.html](http://0branch.com/notes/tco-cl.html)

<comment><USER21> I seem to recall it depending on compiler settings whether sbcl does tco. Which means you probably don't want to rely on it in general unless you are okay being locked to a specific implementation and specific optimization settings that may-or-may not seem magical to the uninformed user.

<comment><USER4> There is Common Lisp software which needs TCO and only runs in TCO supporting implementations.

</comment></comment></comment></comment></comment></comment><comment><USER22> I'm not a clojure developer, but I'm intrigued.

I was gonna post the question "Why should I learn clojure?" but that's easy to google for and get good articles.

I was then gonna post "What's a good book for learning Clojure?" but I can get that on Quora.

So my real question is: what can I read about Clojure that will get me up to speed on its unique awesomeness? I don't need a tutorial that shows me how to add two ints or invoke a function. Show me the good stuff!

<comment><USER23> In my opinion, Halloway's _Programming Clojure_ is a good beginner's book because it hits the right mix of Clojure newbie with experience programming. Among free online tutorials, Aphyr's _Clojure from the Ground Up_ is my recommendation. A little deeper into the language, Fogus's _Joy of Clojure_ hits more technical topics.

<comment><USER24> I'd recommend against Programming Clojure and instead recommend Clojure Programming from O'Reilly.

I read a fair amount of both and the former explains the subject matter too superficially IMHO. +1 for Joy of Clojure which is a nice read in parallel.

<comment><USER23> That was my impression of _Programming Clojure_ at first, it seemed rather lightweight. What I came to believe is that Halloway's presentation focuses on simplicity but achieves reasonable depth. [1] The high level of accessibility reflects Halloway's background in the training industry and the his expertise in Clojure. His book is efficient in the same manner as Clojure.

 _Joy of Clojure_ is a good book. It goes deeper while assuming more of the reader. The technical detail is useful and interesting, but for me, the narrative seems a bit less cohesive [disclaimer: I have the first edition, not the second]. I haven't read _Clojure Programming_.

[1]: Edit. For example the running exercise is porting a Java build system to Clojure. That's full on software engineering, not a let's-pretend.

<comment><USER24> Thanks for the hint, I'll check the build system example.

I focused on Programming Clojure as it's almost half the size of Clojure Programming and I want to get to other, more focused clojure books (Reactive Programming, Macros). But for me, personally, the examples given so far (I've made it at least through the State-chapter) weren't well explained. I'll see how Clojure Programming holds up in that regard but so far many explanations have been better IMHO.

</comment></comment></comment></comment></comment><comment><USER25> His build implementation uses tail recursion which is not preferred in CL. One can build in a similar way that as shown at the end.

        (defun build (list-1 list-2)
          (loop
           :for elem-1 :in list-1
           :for elem-2 :in list-2
           :collect (list elem-1 elem-2)))

A much bigger difference imho between Clojure and Common Lisp is that the former is built on abstractions, conj, while the latter is built on concrete cons cells. There are more other significant differences but I don't want to flame/argue.

<comment><USER16> Is it even recursing in the tail position though? Reading the code it looks to me like the recursion result is used as an argument to a subsequent function call (append).

<comment><USER26> Spot on! The code fails as the author has used nil? rather than empty? The recursive call is not from the tail position so tail call optimisation is not possible in any language.

<comment><USER25> > tail call optimisation is not possible in any language.

Afaik it is possible in racket. Read the note at the end here: [http://matt.might.net/articles/lexers-in- racket/](http://matt.might.net/articles/lexers-in-racket/)

</comment></comment></comment></comment><comment><USER27> The reason why some people say that Clojure isn't a lisp is that some of its design decisions such as those mentioned in the blog posting detract from the essence of lispiness. It goes too far to say that it's not a lisp but it's certainly less lispy than Common Lisp or Scheme.

</comment><comment><USER28> What is the name for illustrating the point with deliberately unrelated example? His clojure code fails because he did not swap nil? for empty? (and he even states this in the article) but he then uses it to illustrate the absence of TCO in clojure.

<comment><USER29> nil? is a pretty big thing. Is Clojure even a Lisp if nil is not the empty list?

Edit: Jesus Christ, Clojure doesn't even have conses. Why the hell do people call this a "Lisp"?

      > (= () nil)
      false
      > (('a . 'b) . ('a . 'b))
      java.lang.RuntimeException: Unable to resolve symbol: . in this context
      > (cons 'a 'b)
      java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol

<comment><USER30> Sure, it does have cons, but your second argument wasn't a sequence. Try:

      > (cons 'a ['b])
      (a b)

      > (doc cons)
      </comment></comment></comment><comment></comment><comment></comment><comment></comment><comment>-
      clojure.core/cons
      ([x seq])
      Returns a new seq where x is the first element and seq is the rest.

<comment><USER29> That's not a cons, that's a linked list. As tokenrove mentions, a cons in a Lisp is just a tuple (`cons` is the name of the type and the function constructing it). It can contain any two values.

</comment></comment><comment><USER31> I might be wrong, but the biggest difference is that lists are immutable in Clojure which makes some data structures which are based on shared conses difficult to construct, or less efficient.</comment>


CSS Based Cartography - <AUTHOR> http://styler.mapsense.co/

<comment><USER2> So cool and flexible!</comment>


Modeling Physics in Javascript: Gravity and Drag - <AUTHOR> http://burakkanber.com/blog/modeling-physics-javascript-gravity-and-drag/?

<comment><USER2> I wrote something like this a couple years ago[1]. I also attempted to support ball-to-ball collisions. I rarely do any graphics type programming so this was a fun diversion.

However, the simulation would slow down considerably after adding a few dozen balls. This was largely due to the quadratic nature of my naive collision detection. In order to remedy the speed problems I implemented[2] a quadtree I found online to assist me in culling a lot of my expensive collision checks. The bounds of the quadtree sections will appear as you begin to add balls.

Unfortunately the quadtree wasn't the performance savior I expected it to be. I didn't notice a dramatic improvement in the number of balls I could support. I also introduced a bug with the quadtree version where certain collisions are missed entirely.

Perhaps I should revisit this simulation and see where I was off.

[1] - <http://jsfiddle.net/simucal/RvA9w/33/>

[2] - <http://jsfiddle.net/simucal/RvA9w/>

<comment><USER3> Instead of quadtrees take a look at spatial hashing[0]. It's more simple than quadtrees and the performance is similar if not better.

[0] [http://www.gamedev.net/page/resources/_/technical/game- progr...](http://www.gamedev.net/page/resources/_/technical/game- programming/spatial-hashing-r2697)

</comment></comment><comment><USER4> I know it is educational and it does not matter in presence of dissipation, but it would be nice to mention that Euler method is not only an approximation but also terribly inaccurate one. It won't produce any stable oscillations or orbits for instance.

<comment><USER5> I actually mentioned that in a comment lower on this page. I will be talking about ODE solvers a couple of articles from now. The Euler method isn't acceptable for actual simulation but it's the easiest to understand and it gets the job done for now!

<comment><USER6> The Velocity Verlet integration method isn't much of a jump in complexity ([http://en.wikipedia.org/wiki/Verlet_integration#Velocity_Ver...](http://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet)) and works _great_ for kinematic simulators.

As a cool feature, it maintains the energy of the system, so you can slow down, stop, and then rewind time and arrive at the same previous configuration, all by changing the delta T's inside the evaluation.

<comment><USER5> I'll definitely be talking about this one in my Solvers article!

<comment><USER7> be sure to read "numerical recipes in c" chapter 16 first.

fwiw the only thing you need to do to be one of the best references on numerical integration in js on the net is translate the code to javascript...

</comment></comment></comment></comment></comment><comment><USER8> I've messed around a bit with the Bullet physics library and was wondering if anyone knows how it works under the hood. It's not brute forcing the collisions, because it can handle thousands of objects.

Does anyone know how they do the approximation? There is a fudge factor you can set for say a 10% boundary around an object, where it's almost like it moves all of the objects and then takes a best guess where they should be placed for the next physics frame. But I'm curious what their approach is called, if it's a general solution.

<comment><USER5> Look into quadtrees, that's a good way to do collision detection in 2d. Or just partition your world into a fixed grid and only consider collisions with objects in the same grid square. Quadtrees are just a smarter way of doing that.

</comment></comment><comment><USER9> I recently did something somewhat physics related, implementing Kepler's laws of planetary motion in JS to produce a 3d simulation of the solar system: <http://www.asterank.com/3d/> ...I plan to generalize it into an open source educational tool that allows people to build arbitrary space simulations on top of its physics engine.

Another interesting JS physics experiment that I found while looking into this stuff is this n-body gravity simulator: <http://www.spacegoo.com/solar_system/>

<comment><USER5> Awesome! I couple years ago I made a simple game that uses orbital mechanics too: <http://burakkanber.com/orbit>

If it will help at all feel free to poke through the source code!

</comment></comment><comment><USER10> Very good article and very good explained. I have a hard time really getting physics but if my teachers would have explained it this way I might actually have had fun with it :)

<comment><USER5> Thanks! That's what this series is all about. Physics and math really are fun, you just need to figure out an application that excites you and also have someone teach it to you in a manner that keeps you engaged. That's what I'm trying to do here, so if you're interested you can sign up for the mailing list and I'll send you emails when new articles are posted!

<comment><USER10> Yes, did this already :) thanks for making these articles!

</comment></comment></comment><comment><USER11> The page won't come up for me. Is it already hurting from being HN'ed with only 26 upvotes?

<comment><USER5> Yeah it's a tiny box with Wordpress on it. Fixed!

<comment><USER12> Also, it would be great to notified about ALL your blog posts, not only this series. :-)

<comment><USER5> Thanks for the support! I wanted to set it up so that I'm not flooding inboxes-- so you may be better off subscribing to the blog's Atom/RSS feed :)

</comment></comment></comment></comment><comment><USER13> Move the Fiddle to the top of the page, and get much more user interest.

</comment><comment><USER14> Thanks for putting up the email subscriptions

</comment><comment><USER15> This might become my favorite blog ever.

<comment><USER16> You really want to play with physics/math with ECMA 262? O_O (hint JS knows nothing of integers) Floats are way to slow (and faulty when div/mul are called) compared to int to do anything serious. All 3D engines tricks are about doing complex math with integers (EDIT: or other tricks [http://en.wikipedia.org/wiki/Fast_inverse_square_root#Overvi...](http://en.wikipedia.org/wiki/Fast_inverse_square_root#Overview_of_the_code))

<comment><USER17> Why would you post a link to an example using floats then? I mean sure, part of the trick involves treating the float as an integer but the number is still meant to be interpreted as a float.

Your assumptions about speed might be true for something like a Nintendo DS which doesn't have a floating point unit but a 3DS does, a vectorised one no less. Also in Javascript integers that can fit into 32 bits are actually integers nowadays.

All in all, I believe your information is outdated.

<comment><USER18> Not to mention that most modern games and physics engines all use floating point numbers these days. We're not in the 90's anymore - gpu's all support floats natively and are very fast at processing them, cpu floating point units are as fast as integer units, SIMD (eg SSE) supports fast floats and doubles. There's really no reason to avoid floats unless you're doing something very very special (hint: if you're arguing about these things, you're probably not).

Havok, Bullet, PysX - as far as I know they all use floats.</comment></comment></comment></comment>


Making Time – The Struggle of Being Busy in Business and Life - <AUTHOR> https://medium.com/@bretmorgan/making-time-the-struggle-of-being-successful-in-business-life-6b8dce26d439 <comment><USER2> Can't help noticing that the author's daily schedule, for all that he's extolling the virtues of planning things out and making sure to get enough leisure time, end up at 6.5 hours of sleep a day. Yeah, I guess that works.

<comment><AUTHOR> Thanks for reading - I appreciate it!

Two comments on this point

1) I did preface that this is a loose framework that I run with and it's not set in stone - if I need more sleep on a particular day, I take it.

2) While all human bodies vary with their sleep needs, I find that I function best between 6 and 7 hours per night. While I can run on less at times, I do need to catch up. I find myself less focused when I start approaching the 8 hour mark.</comment></comment>


Surviving the new MacBook Pro - <AUTHOR> http://bradfrost.com/blog/post/surviving-the-new-macbook-pro/ <comment><USER2> "Surviving" the new MacBook Pro? It must be hell for you. I feel your pain.

How many lives must have been ruined, since it was made compulsory to buy every incremental hardware upgrade from Apple.

It certainly puts the trivial problems of those being bombed back into the stone age in the Middle East, or dying of famine in South Sudan, into perspective.

Maybe some of those folks could organise a collection for you?</comment>


Scientist Suspended for Presentation That Argued There Is No Sexism in Physics - <AUTHOR> https://motherboard.vice.com/en_us/article/a38jjz/head-cern-scientist-suspended-for-presentation-that-argued-there-is-no-sexism-in-physics <comment><AUTHOR> The removed slides are here: [https://drive.google.com/file/d/1c_NyUhOZ8erdqU2AGZJZtNfFeA9...](https://drive.google.com/file/d/1c_NyUhOZ8erdqU2AGZJZtNfFeA91Kefj/view)

</comment><comment><USER2> Look I read the slides.

His argument is basically look at the citation data-there are systemic gaps between men and women. Then some interpretation yields his claim that women aren't discriminated against. Is this an ironclad argument? No I don't think so. Does it have tinges of right wing paranoia? Yes. If I was a woman in physics would I be eager to collaborate with him? Probably not. Do I agree with him? Basically not all. As a dude in stem I can totally see why women wouldn't want to be surrounded by socially awkward dude-bros and how the dynamic could be discriminatory in a variety of ways.

I just don't really see anything here that merits him being removed from a research community.... It seems a like a massive infringement of academic freedom to decide that the mere act of questioning commonly accepted beliefs about gender and science merit dismissal. This is just a cynical CYA move by CERN to deflect bad press.

Edit: he definitely is a bit of a right wing paranoiac though-just fyi.

</comment><comment><USER3> At least Damore put in some effort. Strumia slides end with right-wing conspiracy theory tone.</comment>


In Italy, bitcoins are not subject to AML requirements - <AUTHOR> https://bitcoinmagazine.com/19244/central-bank-italy-declares-virtual-currency-exchanges-not-subject-aml-requirements/

<comment><AUTHOR> it is very hard to me to understand what the article/bank of Italy is trying to say. Anyone can explain it in a more friendly/geeky way?</comment>


Show HN: ROAR – a wearable safety device for women - <AUTHOR>

Hi all, I'm launching a landing page to announce my new startup - www.useROAR.com - a tech wearable company aimed at reducing assaults against women.
We're finalizing the prototypes now and will be crowdfunding on CrowdTilt or Kickstarter later this Summer. The page is meant to collect emails of those interested in learning more about what we're doing so we can have a community ready to go when we announce the campaign.
I'd love to get thoughts from men and women on what you think of the messaging and the idea. I'm here to listen!
[EDIT] - Here's an album showing our circuit boards for the prototypes: http://imgur.com/a/O85fs There are actually two different versions as we're testing out using a rechargeable battery and a cell battery. Each one has a 75db alarm, a bright flashing light, and a bluetooth chip that connect to a smartphone to send a distress text/call. <comment><USER2> I feel like the way you're positioning this paints women as weak and unintelligent and plays off of their fears.

This line in particular paints women as weak and unintelligent:

"Existing self defense devices such as pepper spray and stun guns can be scary and intimidating."

Bringing up the 2012 Delhi gang rape is really playing off of women's fears and I seriously doubt your product would have made any difference whatsoever in the outcome of that attack.

Another problem I have with this is the positioning of it as only a product for women. Men are the victims of violent crime more often than women. Why wouldn't this be a good product for men too? By marketing only towards women to protect themselves from men you are implicitly placing women in the role of victim and men in the role of aggressor. This just serves to reinforce the roles prescribed by the so-called rape culture you're trying so hard to put and end to.

</comment><comment><AUTHOR> Clickable link: [http://www.useROAR.com](http://www.useROAR.com)

</comment><comment><AUTHOR> Clickable link to circuit boards: [http://imgur.com/a/O85fs](http://imgur.com/a/O85fs). They are 40mm x 25mm in size.

</comment><comment><USER3> The first thing I think of when I read the title of this post is "How is it different to a rape alarm?" this page does not answer that question.

<comment><AUTHOR> Maybe I should have that as an actual question. It's basically combining the functions of a rape alarm and an emergency kiosk (like those in campus) to sound an alarm and call for help, sharing the location of the wearer. Is that better?

<comment><USER3> That'd be a great addition, showing the product on the landing page and listing its unique features in a way that can be glanced over and understood is essential.

<comment><AUTHOR> We don't have a product to show quite yet as we're testing the prototypes. I love the idea of a features list though - thanks!

</comment></comment></comment></comment><comment><USER4> You shouldn't be doing a Show HN on a project that has nothing to show for it yet.

<comment><AUTHOR> Would it help if I posted pictures of the prototype board and explained the mechanics behind it?

<comment><USER4> That would help _significantly_.

<comment><AUTHOR> Here are some pictures! [http://imgur.com/a/O85fs](http://imgur.com/a/O85fs). I wish there was a quarter next to the chips to show its size but I can share it's 40mm x 25mm - comparable to a small key tag.</comment></comment></comment></comment>


Hit Reply – Episode 1: Launch [audio] - <AUTHOR> https://hitreply.co/ep/1/launch/ <comment><AUTHOR> Hey all.

This is our second episode (zero based numbering) where we discuss the most important step any maker can take, that most never do.

Launching.

We talk about the feedback we got from our first episode, when are you 'ready' to launch, and some stats from our launch day.

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

As always, we'd love to get your thoughts, just hit reply and let us know :)

</comment><comment><USER3> launching sounds like the most obvious thing to do but it is so underrated - <USER2> literally never launch, I always procrastinate and I always leave a project to die a slow death 3/4 of the way getting it done.

I'm working so hard to not do that again, this has giving me a much needed kick up the arse.

<comment><AUTHOR> Hey thanks cambridge. You're not alone, we've all been there. I look forward to seeing what you ship! :)</comment></comment>