The Wisdom And/or Madness of Crowds - <AUTHOR> http://ncase.me/crowds/ <comment><USER2> Take a look at the Foundation Trilogy by Isaac Asimov.

The concepts proposed here are not new.</comment>


How Doing Less Work for More Money Saved Client Work - <AUTHOR> http://joshuablankenship.com/blog/2011/08/27/how-i-finally-became-a-professional-designer/ <comment><USER2> I've reached about all the same conclusions myself, except for the "only work with one client at a time" part. Ideally it would be great, but I've found that design work is often an ongoing process, where you might need to invest tons of hours into designing a home page at one point, and then just spend a couple hours on a widget redesign the next month.

So I need multiple clients just to fill in the gaps when some of them don't need my services that much.

If I applied the "1 client only" rule, it would prevent me from having that flexible long-term relationships with my clients, and I think the quality of my work would suffer from it.

<comment><USER3> Absolutely agreed. If I was doing 40+ hours a week of client work, I'd have the margin (and financial need) to work with multiple clients in any given season. But in addition to a full-time gig, I just can't swing it.

Most the work I take on is shorter design/direction gigs with 1-3 week timeframes. In the gaps I take my 15 hours and use it for personal work. But again, all unique to my situation.

</comment></comment><comment><USER4> great read. Designers perennially bitch and moan about difficult clients, but when I review my last year of consulting, I can agree with Joshua that the difficult experiences have been _my_ fault. I get to pick my clients, and it's up to me to set expectations and manage the process. It's very true that all the skills and talent one has developed can be rendered meaningless by a lack of professionalism. And sometimes the very definition of professionalism means not getting into something at a price / timeline / term of agreement your integrity can live with.

</comment><comment><USER5> _You're supposed to be the professional, remember?_

I do.

</comment><comment><USER6> > I don't want my reputation and talent to take me where my integrity can't > sustain me (and it will, if left unchecked).

It must be tough having so much reputation and talent. If you can learn to control your talent the world will truly be a safer, if duller place.

<comment><USER7> Without the context the quote seems very egotistical. With the context I think it makes perfect sense. Your comment draws a completely different picture.

 _I can't juggle. I definitely can't juggle multiple clients and serve them well on the thin time margins I'm keeping. I've always failed when I tried. I know my limits. I don't want my reputation and talent to take me where my integrity can't sustain me (and it will, if left unchecked). It damages my rep and renders my talent meaningless in the grand scheme of client services. "He's real talented, but he doesn't do what he says" is a massive failure unless my goal is to be known as an unprofessional, out of work, real talented guy. I'd rather serve one client to the best of my abilities than multiple clients simultaneously, mediocrely._</comment></comment>


New chapter of Learn You Some Erlang - <AUTHOR> http://learnyousomeerlang.com/relups

<comment><USER2> Author here. To be fair, there is one new chapter coming out every 4-5 weeks on average (for over 2 years now), depending on how fast or busy I am.

This one is on Relups and Appups, or a way to do hot-code loading and live software upgrades in a safe manner, hidden from race conditions and state changes. This is done using the OTP framework's release_handler. The process is a good bit messy, requiring some manual work that would benefit from being automated more.

However, this section of Erlang is hardly ever explained, so I attempted to make one effort into documenting it and its quirks for other fellow Erlang developers out there. Hopefully, Rebar and other tools will be able to build on that documentation to foster better relup abstraction layers, also making everyone else's work easier.

This safe way to do code upgrades is one of the feature that differentiates Erlang from many other languages when it comes to ad-hoc code updates. I've seen other languages do the equivalent of loading new code (reloading a module, calling eval() on a new version of the code, etc.), but I don't recall seeing many of these taking care of handling state change or race conditions on events the way Erlang/OTP does it.

<comment><USER3> The biggest problem for me, with Erlang, is that there just aren't a lot of great sources for documentation. There are even less (obvious) resources for learning the language from scratch. This new chapter helps a lot with both.

<comment><USER4> Two excellent books (O'Reilly, PragProg) and this site are great for beginners. The standard docs are very good once you are comfortable with the language. Great mailing list. I don't agree with your comment.

<comment><USER3> There are certainly resources out there to learn Erlang. I found it difficult to find those resources, it's possible that was due to user error (me). There wasn't anything immediately obvious that was the "best" way to get started, especially without committing to buying a book that might not be what I wanted.

Other languages do a much better job (IMHO) of helping you get your feet wet before committing further. If you want to learn javascript, you watch the Crockford videos. After a couple hours, you have a pretty good idea of what it's all about and if you want to spend more time learning it. Erlang didn't seem as accessible to me. That's not to say that there aren't resources available. They just aren't as immediately obvious as they could be.

</comment></comment></comment></comment><comment><USER5> Recently I had the pleasure of having the author come out and teach my colleagues and I some Erlang. It was a pretty crazy day, with limited power and internet (just after Irene), and we powered through. He did an excellent job. In one crazy day, he made Erlang fun, and I was able to grasp the power behind it.

I haven't had the opportunity to play around with it as much as I've wanted (I've just moved), but I'd highly recommend checking out his site, and reading further. He was incredibly knowledgable, and made learning enjoyable without being boring.

<comment><USER2> Oh, hi! I left on Tuesday morning (as you may know). I was wondering if the power ever came back on before you guys left.

Thanks for the nice comments too! Your group was pretty fantastic at that. Being motivated with the weird conditions for the day, even with some of you having flooded basements and whatnot. It was a pretty fun day.

<comment><USER5> Power came back about noon on Tuesday. That meant Tuesday morning was spent building bridges, trap shooting, and racing one another in go carts that we ended up crashing in practically every race. =)</comment></comment></comment>


Public Slack room - <AUTHOR> https://iwritecodeslack.herokuapp.com/

<comment><AUTHOR> I apologize if this is not an appropriate post (spend most of my internet lurking on subreddits).

Anyways I've set up a public Slack team for coders. Kind of like Freenode/IRC, but with a much better interface. Just a place for people to hang out, chat, ask questions, swap ideas, etc. Not a lot of active users yet, but I only launched it a few days ago so I am hoping to eventually build a large community in it. Let me know what you think!</comment>


Ask HN: Do you have any settings recommendations for Orbot as a relay? - <AUTHOR> I currently have unlimited data and I'd like to contribute to the Tor community. I am going to search for answers on my own, but I trust HN and am interested in your thoughts on increasing the number of mobile devices being utilized by the Onion. <comment><USER2> Mobile devices have low upload bandwidth and will be mostly useless as relays.

If you want to contribute, lease a server and run a relay on it.

<comment><AUTHOR> Thanks for responding. Once i am done with school i will definitely be doing that. I'm sure this will show my ignorance, but would the low upload bandwidth be mitigated if a certain amount of mobile devices were being utilized in concert?

<comment><USER2> It depends how much download bandwidth the devices use.</comment></comment></comment>


Ask HN: "Y Combinator for people?" - cool-RR Hello fellow HNers!
In the last week I've been thinking about an idea that I'd like to share with you.
In one sentence: It's a fund which gives high-interest loans of about $100,000 to entrepreneurs.
Here's a rough sketch of how it will happen: (all numbers listed here are just suggestions and will probably vary)
The fund chooses people who will receive the loan, in a process similar to how YC chooses hackers. The goal is to choose people whose chances of becoming millionaires are as high as possible. Those people are then given the loan. The loan consists of $10,000 paid immediately, and $2,000 paid every month for five years. All money will be lent at an interest of 20% per year. The entrepreneur may pay off any portion of the loan at any time he wishes; Additionally, there will be a deadline, say 5 years, by which he will have to pay off the entire loan. Entrepreneurs are not expected to report to the fund about their progress, or to explain what they would do with the money.
Why is it good for the entrepreneurs?
It's a little superfluous to explain, but anyway: The entrepreneurs will not have to work for money. They could spend all their time studying or hacking or working on a start-up without any investment or whatever they want.
Why is it good for the fund and its investors?
The fund will make a return on the investments paid to it. Assuming the selection process is 85% successful, the total interest generated by the fund will be 5% per year. If entrepreneurs will be willing to take the loans at higher interest rates (I would personally agree to 30%,) the fund interest could exceed 10% per year.
(Note about this calculation: it turned out to be a much more complicated one than I thought. If you think I made a mistake and you have the correct result, please examine it very carefully before posting. As for my assumptions, I assumed successful entrepreneurs will pay off the loan after three years, and that unsuccessful ones will take all 5 years, and then only $10,000 will be scraped from the guarantors.)
<comment>-
The trickiest part, of course, is choosing the entrepreneurs.
The goal is to choose people who have the highest probability of becoming rich in the allotted five years. If that can be done well enough, the fund can succeed. I think it can be done, and in a similar way to how YC selects hackers.
It should also be noted that even an entrepreneur who has failed to get rich by the end of the four year can resort to taking a job at a big company. One year of that will pay off most of the loan, and will allow him to take a separate loan from the bank to cover the rest. This means that a 85% successful selection process doesn't require that 85% will become millionaires: If 60% become millionaires, and 25% get a "good" job at a big company, then this will also work.
-----
I would say that this idea is sort of "Y Combinator for people", in contrast to the original Y Combinator which is targeted at companies. Actually it seems like a logical step: If the most important ingredient of a start-up is a determined entrepreneur, why not invest directly in the entrepreneur?
So I hope you have some constructive comments about this, and I hope even more that someone reading this will pick up the glove and do it. </comment><comment><USER2> I'd have been the target market for something like this, and I wouldn't have done it. I would have hated to have debt hanging over me. Equity funding is better than debt for high risk ventures. But I doubt one could legally buy a share of someone's future earnings.

<comment><USER3> I certainly hope it couldn't be legal.

The _only_ way this idea meets my standards is if the loan is invested in a corporate entity which enables the recipient to fail and walk away from the debt (and assets, of course).

Let me state this as clearly as possible for anyone that thinks this is a good idea: "excessive usury" is pure evil. Being able to walk away from failure and start again is the secret sauce that makes the American economy the envy of the world.

<comment><USER4> Amen.

Part of my motivation to get an investor was precisely to offload that financial risk to someone else. I'm already putting in at least 2 years of my life, including a lot of blood and sweat. If I fail then the last thing I'd want is to spend another X years getting rid of that debt...

Also I'm truly baffled at your statement of:

 _even an entrepreneur who has failed to get rich by the end of the four year can resort to taking a job at a big company. One year of that will pay off most of the loan, and will allow him to take a separate loan from the bank to cover the rest._

Excuse me?

After the 4th year I'd owe you roughly $120000. Most of us mere mortals would probably need closer to 7-8 years to pay that back.

</comment></comment></comment><comment><USER5> Intruiging idea. However it seems extraordinairily high risk for the investors. You mention choosing the recipients would be tricky and that if they fail (which I imagine would occur in a high percentage of choices) they could get a high paid job to pay it off. However:

\- Jobs ar never guarateed. I know some excellent people who have struggled to find jobs. If they had to apply to a job after 5 yrs of being an entrpeneur I think they might struggle. "So what have you been up too prior to this?". "Oh, well someone gave me 5,000 a month for 5yrs and now I need to pay it off." Even with spin it doesnt sound too hot :)

\- The current economy is shaky. This person has no guarantee for this high interest loan. If things go south there is _no_ guarantee on the money. Yes the return is very good (well, sort of good) but the risk seems crazy high. Expecially as there is no feedback...

When YC funds hackers they choose projects that may or may not succeed - <AUTHOR> is a risk. But there is a modicum of protection in the funds. They also take an involvement in the business and provide valuable advice that will help it get off the ground. In your scheme it is something of a fire and forget.

If I had 100,000 to invest/spend somewhere I would certainly play it on other risks (definitely trading 20% year on year for 10-15%) with more security.

(btw are you calculating interest year on year or per total exp? yoy your stats are ok, but per total your average is actually makign a loss of about 3% (ish)).

EDIT: I just realised you said $2000 a month - not $5000. Last year I was on the same salary (in the UK £1000 a month, which is probably a touch less). I lived at home with my parents and paid them £120 a month rent. Even then I just about managed to have any liquid income (buying foodand contributing to the house bills). Were I living on my own (payinf real rent) I dont think I could afford it :D (would be a push) and certainly not afford the facilities to be an entrepeneur.

<comment> cool-RR About the calculation, I assumed that the fund takes loans from an imaginary bank at an interest rate "r" to pay for the loans. I calculated how high the r can get for the fund to break even, and that's the result I gave. (I solved it with Mathematica.)

</comment></comment><comment><USER6> I have a question. Are you making the loan to the corporation or to the individual?

If you are making the loan to the corporation, then it'd a fine business. You are basically limiting your upside, as opposed to an equity investment, but you will be able to calculate your revenue stream more easily. If the loan is to the corporation, then the founders won't be liable for the money, and you're just another investment vehicle.

If you are making these loans to the founders, then you're just another credit card company. I doubt there will be anyone good competing for your loans. The good people will get the equity, and only a dope would take a $100,000 loan at 20%, for anything. Maybe you can sucker some college kids like the credit card companies do.

</comment><comment><USER7> "It should also be noted that even an entrepreneur who has failed to get rich by the end of the four year can resort to taking a job at a big company. One year of that will pay off most of the loan, and will allow him to take a separate loan from the bank to cover the rest."

So, if in one year your hypothetical recruit could pay off the majority of this $100000+ %20/year loan, why wouldn't they just work for one year at big co, save a bunch of money and then quit to do the startup?

<comment> cool-RR A year is a very long time to lose, in my opinion. That's why I wouldn't do it. But for a worst-case scenario, I find it acceptable.

<comment><USER7> I'd be interested to know what your assumption is of net income this person would have to receive in order to be able to pay off the majority of the loan in 1 year.

</comment></comment></comment><comment><USER8> Maybe I read this too quickly, but the vast majority of people you'd want to lend this kind of money to are either (a) not going to want to borrow money at 20% interest, or (b) have access to far lower interest sources of funding, even in the unsecured context. This idea doesn't make much sense to me.

<comment> cool-RR As for (a): 20% is considered a huge interest by most people. But that's because most people are not entrepreneurs. A good entrepreneur is a poor college kid at age 20 and a multi-millionaire at 27. That's a growth rate that far exceeds 20%.

I would personally take that loan at 30%, and even more.

For (b): I don't have access to such a thing. I found that without a job I couldn't get a loan bigger than $10,000. I would be very happy if you showed me a program which would give me a big loan, at any interest rate which is below 40%.

<comment><USER9> A good entrepreneur can also get equity financing on reasonable terms, usually.

<comment> cool-RR For a start-up proper, yes. But most of my projects are not really start-ups which I can sell equity from.

Imagine you decide to study some cool new technology. You are making a bet: Learning this technology now might get you a great reward in the future, but you can possibly just be wasting your valuable time. So it's a sort of mini- startup, your study of this technology. But you can't sell equity out of that thing.

<comment><USER9> How do you expect to pay back debt then?

If you're looking for ways to support talented people with pie-in-the-sky ideas, that's what the Macarthur Fellowships are for. Those are outright grants, so the people in question can concentrate on what they love and not have to worry about paying back a high-interest loan.

</comment></comment></comment></comment></comment><comment><USER10> High interest loans would likely get defaulted on, as $100k isn't very much money for someone who has a house, good credit or a co-signer who can help them get more.

It'd be a small sector of people who'd qualify and among those, they'd either be ill equipped to hit a home-run the first time out or other factors would preclude them from succeed the way they'd want to.

I appreciate the sentiment, but I think there are a lot of better ways that you could reach "ordinary people" (aka, folks who don't know what Y Combinator is and would never care) without offering them high interest loans.

The barriers to entry to capital are high and programs that say "forget business plans that no one reads, lemme see what you can create in a short period of time," are the right model, but there are status quo ways to do that and the pitch of "we can create millionaires" isn't going to do much for the ones you're asking to pony up the cash.

</comment><comment><USER11> You can finance yourself with credit cards for a far lower interest rate than this. If you're betting on your ability to pay back debt, and there's no value add for taking the money (such as an investor with connections), then you go with the cheapest cash available.

<comment> cool-RR The two credit cards I have will give me a maximum loan of $3,000 if combined. If a credit card gave me $100,000, I'd take it.

</comment></comment><comment><USER12> Your a priori success-rate of 85% is hard to manage and 5-10% annually in return is too low for that risk. I can invest in opportunities with a higher return on equity and have things better under control.

But your scheme is flawed in just another way: You invest in the entrepreneur, but you don't profit from his success. You're just granting a credit (% on capital), not making an investment (% on performance).

And there alread _are_ such schemes, where investors can give money to high potentials and profit from their later income. These high potentials have to take a life insurance for the case they die in the meantime...

</comment><comment><USER13> You will have a bunch of free-loaders taking the money and then declaring bankputcy or otherwise weaseling out. YC does not give that much money so it's not a problem for them (they also make you go over there so it's actually easier to ge a job for any would-be free-loader).

The big problem to solve is reputation - if you can reliably figure out who is trustworthy then you might be onto something.

Also, debt is a lousy choice - investor upside is limited and not proportionate to the amount of the value they bring to the table. Equity will make a much better choice. I don't think it should be hard to draft up a contract that says "I will give up 10% of my earnings over 100k/year up to the maximum of $1m total in exchange for $100k investment". Talk to a lawyer about this. But once again, anyone can simply declare bankputcy and get rid of this contract.

Your problem is about finding a) honest and b) resourceful people to invest into.

</comment><comment><USER14> I think you're missing two key points about YCombinator:

      - YCombinator doesn't make you give the money back if your thing doesn't take off.

      - YCombinator's isn't really giving you money.  They're giving you influence and contacts.  That's *huge* in this industry.  The money is not really a factor.

All your program seems to offer would be a loan with a bad interest rate. As others in this thread have noted, that sounds like a bad investment from both sides.

Now if you could come up with something that actually modeled what YC does, but for individuals instead of companies, then that might be a good idea. "Here's 20k and a pile of help. Knock yourself out, but we get 6% of anything big that you do".

</comment><comment><USER15> The only part I agree with is investing in the entrepreneur. Check out <http://www.entrepreneurcommons.org/>

Your major flaw is that you assume 85% success. The truth is that for $100,000 loans, most entrepreneurs will spend it and then default on the loan.

Entrepreneurs will invest the money you give them: hire people, hire contractors, build stuff, etc. Once their venture fails, they come back to you and apologize, but the money is gone.

To use your words, your plan is great for the entrepreneurs, and very lousy for the investors.

</comment><comment><USER7> "...the total interest generated by the fund will be 5% per year. " "...the fund interest could exceed 10% per year."

I can buy MO right now at a dividend yield of 7+% and have equity in the company. Assuming zero change in the dividend payout or stock price over the next 5 years - which I don't think is any more unlikely than your assumed 85% required success rate, the 5%-10%/year (with no equity) from your assumptions doesn't seem quite so attractive.

</comment><comment><USER16> Won't work, here's why: As an average schmo, I can access (via credit cards) just as cash at a similar rate. And if I fail, I can walk away from it with no danger to my reputation. Credit report, yes, but who cares about that? You are a sucker waiting to get milked.

</comment><comment><USER17> This sounds a lot like a student loan, except with a much shorter term and higher interest rate.

</comment><comment><USER18> There will likely be problems with usury laws in various states that regulate the maximum amount of interest charged on a loan.

</comment><comment><USER19> Short of a DNA scan, it is hard to see how one could select the best individuals. If one could show that one's parents were big business people, that lends confidence, but there is always a chance someone is on the short end of the gene pool. Would not it be great if we could predict the winners from the losers in society ahead of time, based on some selection criteria. But this is difficult. A DNA scan (expensive in itself) could show health and even cognitive fitness, and that could be augmented by IQ tests, etc., but there is not a sure way to do this. Only markets can determine fitness, and that is in retrospect. Ahead of time, I do not see how we can predict the fittest members of society, which is what this scheme would demand, the ones "most likely to become millionaires". Performance picks the smart from the dumb, but predicting this ahead of time is dubious. A DNA scan is as close as you could get I suppose, to weed out people with a likelihood of developing mental problems later on in life, etc., but still, there is error here. You want to find the Over-Man of Nietzsche. In my opinion the only Over-Man is that what the market determines. And you can't ever know that ahead of time, even with DNA sequencing. That helps your probabilities but you are still playing dice. Frankly I feel there is no such thing as the "Over-Man", there is only people whom markets favor over others, and knowing which ones those are going to be is rather hopeless.

<comment> cool-RR Forget DNA and the over-man. For starters I would take the 200 best rejected candidates from Y Combinator.</comment></comment>


'Dangerous' AI offers to write fake news - <AUTHOR> https://www.bbc.co.uk/news/technology-49446729 <comment><USER2> GPT-2 has been already known by many people for months right now and is capable of generating realistic text since it was introduced. It's just that for 'ethical reasons' OpenAI refused to release the full dataset but instead released a smaller and limited version, but others have recreated a larger one to closely-replicate the original.

> I'm terrified of GPT-2 because it represents the kind of technology that > evil humans are going to use to manipulate the population.

GPT-2 only is actually nothing compared to what is really going on. I won't say it is 'terrifying' but I would say that what would be more interesting is that if you combine thispersondoesnotexist.com, FaceApp, GPT-2, fakena.me, Lyrebird, DeepFake, Chatbots and few-shot talking heads [0] you can create realistic fake profiles. Although it is easy to generate, it will be harder to maintain over time as you have to do your due-diligence or several checks to find at least one anomaly and it can be declared as fake. Thus, it is easy to generate but hard to maintain over time.

So, this sort of doom-saying attitude around GPT-2 is actually just nonsense, unless you get your news from Facebook/Twitter/Online/etc. Just don't believe everything you see on the internet.

Time to get out the good old newspaper.</comment>


Smooth Video Game Emulation in Emacs - <AUTHOR> http://emacsninja.com/posts/smooth-video-game-emulation-in-emacs.html <comment><USER2> This is awesome work, and also a truly great writeup! I particularly enjoyed the outline of iterations to improve performance. Thank you very much for putting this together!

Emacs in general has great potential as a truly general programmable environment, and this is an amazing illustration of these abilities.

</comment><comment><USER3> CHIP-8 brings back memories.

There's a pile of COSMAC-VIP magazines somewhere in my parents' basement. Writing an emulator and typing them in seems like it would be a fun project.

</comment><comment><USER4> Wow, that was an excellent post. I love that they ended up contributing back to a couple projects as they found bugs or lack of functionality with them.

</comment><comment><USER5> An improvement on the classics:

M-x tetris.

or if your the text adventure type

M-x dunnet

(M-x usually is "esc -x")

<comment><USER6> By default M is Meta or Alt not esc

</comment></comment><comment><USER7> All these things emacs does, and yet is still a sub-par text editor.</comment>


BloomRPC: GUI Client for GRPC Services - <AUTHOR> https://github.com/uw-labs/bloomrpc <comment><USER2> Looks cool. I did something similar 2 years ago in a job, and found it super helpful. My favorite feature was that I added an autocompletion/intellisense engine to the editor window in the browser, and then could start creating requests by just ctrl+space-ing. This worked by parsing all input in a failure tolerant fashion, determining at which field the cursor is, and loading possible matches from the interface definition.

It's pretty cool to interact with an unknown server API in the same fashion than with an unknown library in an IDE.

What I also added was the ability to export requests that one created in the GUI (e.g. as a cURL command including parameters). That made it pretty ease to create requests in the GUI, and then persist and reuse them in other ways.

<comment><USER3> Wow! Those two features will be certainly a good addition to the client! I'll be adding them to the list

</comment></comment><comment><USER3> Hi! Creator of BloomRPC here. Thanks for the warming welcoming of the client! I'm glad to see lots of positive feedbacks.

The client aim to give the best developer experience possible on your day to day usage of GRPC services.

We are using it heavily internally and improving it everyday

I hope you'll enjoy working with bloomrpc and that will be soon your GRPC companions

<comment><USER4> PM for gRPC here - this looks great! Thank you for creating it. I'll definitely be pointing folks to it. I saw that there is support for reflection and TLS planned already.

Are there plans to support record/replay of a sequence?

<comment><USER3> Thanks, I'm glad you like it!

Yes, TLS will arrive very soon. Reflection too but it will take slightly longer.

Request chain will follow along!

I haven't thought about recording and replay.

That is a great addition to the editor once we support request chain

</comment></comment></comment><comment><USER5> This is really sweet! Definitely fixes one of the missing usability features compared to JSON/REST APIs.

Are there any examples of public gRPC APIs that provide their .proto files? I know Google does ([https://github.com/googleapis/googleapis](https://github.com/googleapis/googleapis)), does anyone else?

<comment><USER6> GRPC offers server reflection so your tools can interrogate the protocol at runtime, so your tool doesn't need to compile in all the protocol descriptions.

</comment></comment><comment><USER7> looks very similar to a project I worked on last year: [https://github.com/improbable- eng/Dragoman/tree/e8a78c421335...](https://github.com/improbable- eng/Dragoman/tree/e8a78c42133569220113d504340cb39445e65fcc)

</comment><comment><USER8> Great job. I ran this on Windows by building from source, it seemed to work for me. I just had to change a couple of things:

* Activate Python 2 virtual environment (it didn't work with Python 3!)

* Change forward slashes to back slashes in `./node_modules/.bin/electron-rebuild` (I also ran it as a separate command to `yarn install`, not sure whether `&&` would have worked).

* Run `npm start hot-server` (rather than `npm start server-hot` in the instructions).

* Close the Chrome dev tools, which appeared by default.

I must admit I didn't try actually sending a request. Our services are often split into multiple protos with a full relative import (like: import "companyname/project/foo.proto") so you'd need to set the include path for them to work.

<comment><USER3> Fantastic! I've never had a chance on launching the app on windows, I'm glad it worked!

I think you are running the dev mode, that's why the Chrome dev tools appeared :)

The import paths feature will be released soon so stay tuned! In the meantime, you can temporarily place the imported protos close to the one you want to use

Ty

<comment><USER8> Sorry I didn't call this out more clearly, but I think the server-hot vs hot- server thing is a typo in the readme that's wrong on any platform.

Looking forward to include path support. I tried flattening my protos into one directory, updated all their `import` directives and gave it a go, and it works great, thanks! Both client and server running on Windows. My protos use a well known type (google.protobuf.Duration) and I was particularly impressed that it worked without me having to copy in the proto file for that.

I'm sure you already know this, but just in case: Include paths don't just help with proto files scattered across different directories, they also allow part of the path to be part of the canonical name of the proto. [1, 2] For example, if you have these files:

        /
            src/
                xyz/
                    foo.proto   # Contains: import "xyz/bar.proto"
                    bar.proto

Then you need -I/src (or similar) because if you run protoc from within /src/xyz/ without -I then it's like you specified -I/src/xyz, and then foo.proto can't find bar.proto (because it looks for /src/xyz/xyz/bar.proto). Using relative paths like this is useful because you can have proto files with the same file name (like "config.proto") so long as their full canonical name is different, and because generated files are output into corresponding subdirectories (which is especially useful in Python where the subdirectory indicates the package name).

[1] [https://stackoverflow.com/questions/18735609/the-path-in- pro...](https://stackoverflow.com/questions/18735609/the-path-in-protobuf)

[2] [https://github.com/protocolbuffers/protobuf/issues/723#issue...](https://github.com/protocolbuffers/protobuf/issues/723#issuecomment-132845240)

</comment></comment></comment><comment><USER9> Finally! I've been wanting a tool like this to help get my gRPC development flow to parity with REST</comment>


R, the master troll of statistical languages (2012) - <AUTHOR> http://www.talyarkoni.org/blog/2012/06/08/r-the-master-troll-of-statistical-languages/ <comment><USER2> The problem is people using R without trying to learn about the language itself, just assuming it works like their favourite language.

For example complaining that R is slow and then writing iterative solution instead of using vectorization. When I saw the example the author gave my first thought was "sapply/lapply". Lapply is essential to the R use, and is being taught early on in every book/course on R I've ever saw.

"In 2012, I'm the kind of person who uses apply() a dozen times a day, and is vaguely aware that R has a million related built-in functions like sapply(), tapply(), lapply(), and vapply(), yet still has absolutely no idea what all of those actually do. "

<comment><USER3> It's been a few years since I really looked at R, but I don't think the problems with R are simply that people don't learn the language. Some languages are simply not as good as others. We can all learn more about the tools we use when programming, I know that I certainly could. But this doesn't make it our fault that a language is tricky or hard to debug or hard to understand. If we worked at it, I suppose we could all write more efficient programs by using assembler, but that doesn't mean that assembler is the best possible programming language for, say, statistical programming.

Someone, Ross Ihaka, that knows a thing or two about R wrote a short post 6 years ago and said "simply start over and build something better". Take a look:

[http://www.r-bloggers.com/"simply-start-over-and-build- somet...](http://www.r-bloggers.com/"simply-start-over-and-build-something- better"/)

My hope is that Julia will eventually be adopted as a basis for a future statistical programming language.

<comment><USER4> From your link, hilariously relevant to the blog post at hand:

"First, scalar computations in R are very slow. This in part because the R interpreter is very slow, but also because there are a no scalar types. By introducing scalars and using compilation it looks like its possible to get a speedup by a factor of several hundred for scalar computations. This is important because it means that many ghastly uses of array operations and the apply functions could be replaced by simple loops. The cost of these improvements is that scope declarations become mandatory and (optional) type declarations are necessary to help the compiler."

</comment></comment></comment><comment><USER5> I'm a Post-Doc in a small social sciences department in a major university, and am probably the department's ranking R-geek. I did my dissertation, and much of my current work, doing modeling, analysis, and even machine learning in R.

In many ways, I owe much of my success to the power that R has allowed me to wield. Multicore lapplys and ggplot2 are my life these days. But even with this, R drives me absolutely batty, and the documentation, even battier.

I may be competent relative to most, but R feels so taped-together and idiosyncratic that even on my best days, I just feel like a newbie who's built up an army of ugly hacks.

Someday, I'll learn more about the python stats tools and do my stats there. But for now, R it is. Troll on, you crazy bastard.

<comment><USER6> I am in an almost identical situation, just still in the PhD stage.

I moved from Matlab (originally a mechanical engineer) and the biggest shock was documentation and just the internal help stuff in general. The help files on a regular basis require you to understand how something works to understand the thing explaining how it works.

I am often just shocked at little quirks I find trying to do things in R, not that it is worse than SATA of SAS but the goals was to be better. I am all for FOSS, and R provides many extensive capabilities not available in Matlab, but in terms of being user friendly Matlab is so superior it is honestly sad. Oh and '<-' just drives me nuts...I will never understand the choice of two characters where one is entirely sufficient.

<comment><USER7> Iirc it comes from the old APL keyboard

<comment><USER6> well thank you, I always appreciate someone teaching me something :)

<comment><USER7> np. As was mentioned elsewhere in the thread, S is a pretty ancient language so R brings along some baggage with it :)

</comment></comment></comment></comment></comment><comment><USER8> R is a language with a lot of gotcha's. I usually get burned by characters being converted to factors in read.csv() and converting factors to numeric (it works, but not how you intend). The R Inferno ([http://www.burns- stat.com/documents/books/the-r-inferno/](http://www.burns- stat.com/documents/books/the-r-inferno/)) has a lot of other gotcha's and is worth a read for people who use the language.

That said, the power, flexibility and user community make it my go-to for any first crack at an analysis of data.

<comment><USER2> Factor is one of the worst thing of R-world. I don't recall ever needing factors, yet they creep in with many functions (read.csv, cut).

Btw there's a nice readr package (from Hadleyverse) that has a read_csv method that does away with factors by default.

<comment><USER9> How would you represent categorical data then? R's primary use case isn't text processing. And HW isn't always right.

<comment><USER10> As character, for instance (in particular, they can do everything factors can do when used in conjunction with `unique`, and sorted factors can be represented as a conjunction of characters and numerics). Factors work better, but only barely. In particular, they are nowadays not any more efficient than using character (!). They used to be, which is why they are liberally used everywhere in R's base libraries.

<comment><USER9> "In particular, they are nowadays not any more efficient than using character"

How could a comparison of two strings of unknown size be as efficient as comparing two integers? I'm curious to learn something new.

<comment><USER11> R uses a global string cache so any string comparison is just comparing two pointers.

</comment></comment></comment></comment></comment></comment><comment><USER12> I have a love-hate relationship with R, being a predominantly Clojure (and Ruby these days) programmer who only occassionally dabbles in data crunching.

The apply/sapply dichotomy that the article mentions (actually a hexachotomy, there are also mapply, sapply, tapply and vapply) is one example of a gazillion warts that the language has.

Another random one: R has a useful function, paste, that concatenates strings together. Only it takes varargs, not a character vector, so if you have a vector v of strings, you have to use do.call(paste, v). Only not, because do.call insists that its second argument be a list, not a vector, so you do do.call(paste, as.list(v)). And if you want to separate the strings, say, by commas, you have to affix the named argument sep, obtaining do.call(paste, c(as.list(v), sep=",")).

And R's three mutually incompatible object systems. And so on and so on and so on.

There are things to love. The packaging system works really well. I like the focus that R puts on documentation: hardly anywhere is it so comprehensive, with vignettes and all. There are things plainly inspired by Lisp (R is just about the only non-Lisp I know that has a condition and restart system akin to CL). And ggplot2 is one hell of a gem of API.

In many ways, R is the PHP of data science. (Though the core language's still nowhere near as abysmal as PHP.) Despite all the warts, there are all sorts of statistical analyses that are just a package.install() away. Put another way, R is to data science what LaTeX is to typesetting. It's a heavy pile of ducttape, but it's here to stay because it's just so damn useful.

<comment><USER13> I wonder what disagreements or counterarguments downvoters might have, and if they might share them.

For the parent, given what you've observed, do you still go to R for data crunching, or have you found anything in Clojure land that measures up?

<comment><USER12> R. Or a mixed approach, with Clojure for data preprocessing and R for the analysis proper. Case in point: I wrote the Clojure scraping library, Skyscraper [1], and made it output CSV by default so as to be able to easily drop the resulting files to R.

For statistics, Clojure has Incanter, but it's very basic in comparison. There are easily usable Java libraries for certain tasks (MALLET comes to mind), but these are few and far between.

[1]: [https://github.com/nathell/skyscraper/](https://github.com/nathell/skyscraper/)

</comment></comment></comment><comment><USER14> My biggest complaint about R isn't the inconsistency and obtuseness -- I've been using it long enough to get familiar with the documentation and the zillions of varieties of apply. My problem is the data structures.

R has only a few core data structures: vectors, lists, arrays, and matrices. Data frames are built on top of lists, and admittedly data frames are incredibly useful for statistics -- there's a reason pandas exists, and a reason data analysis is much more tedious in other languages.

But there are no hash maps or sets (lists have named elements, but with O(n) indexing; the only hash tables available use environments and accept limited types of keys), no tuples, no structural or record types, stacks and queues only recently became available on CRAN (through C), and so on.

This leads to the folk belief that the only way to optimize R is to vectorize code or to write in in C or C++ (with Rcpp, for instance). No statistical programmer ever thinks about choosing the right data structure for the job, since you basically only ever use lists and data frames. Fast operations on data structures (like graph algorithms) have to be written in C. There's just no way to do it in R.

When I co-taught a statistical computing course, covering the basics of data structures and algorithms, I included some homework assignments where the difference between a fast and a slow algorithm was the choice of data structure. R users struggled because they had very little available to them. If their code wasn't fast because they were doing O(n) list lookups in a loop, there wasn't anything they could do to fix it.

I hope Python and Julia can eat R's lunch. Some day I'll have to get around to trying Julia for a serious project...

<comment><USER11> The lack of data structures in R is a totally fixable problem.

<comment><USER14> Sure, through packages, but you'd need to adapt the entire standard library to take advantage of them, so you could pass new data structures to built-in functions and get meaningful results.

Generic iterators would also be extremely useful to build in, so it's easy to work with a wide variety of structures.

<comment><USER11> And generic functions allow you to fill in those missing pieces from a package too.

</comment></comment></comment></comment><comment><USER15> I think the general consensus is that R is a terrible language with a lot of useful libraries. I especially like that R claims to be inspired by Scheme, but the memo seems to have been "Make sure we f __*ck this all up " taped to the front of the "Lambda the Ultimate" papers[1]. In particular, lexical scoping was one of the key innovations in Scheme and R has pervasively buggered up their implementation, from not distinguishing between defining and mutating a variable to making the default save/load procedures mutate the environment. OMG does R drive me insane (as a programming language person.)

[Saying "there is package on CRAN that fixes this" is not a solution. A language shouldn't require extensive knowledge of the ecosystem to get the basics working properly.]

[1] Scheme was introduced to the world in the "Lambda the Ultimate" series of papers. See [http://library.readscheme.org/page1.html](http://library.readscheme.org/page1.html)

<comment><USER11> No, that is not the consensus. R is (at its heart) a beautiful language that is extremely well suited to its domain. Most people who use R are not professional programmers (or even identify as programmers) so it's not surprising that there's a lot of bad code written in R.

</comment></comment><comment><USER16> Writing a variant of this article has become a rite of passage for all serious users of R. There are two issues that contribute to the difficulties people experience with R. First, yes, R can be confusing at times. Tal explains this really well, but only scratches the surface. There is so much more confusing and counter-intuitive stuff, for example with regards to factors that only very few people seem to understand fully. However, there is a second issue, and this is less often acknowledged: People expect R to be immensely powerful and at the same time easy to use, which is really not a very reasonable thing to expect. This attitude is fairly specific to the R community. No C++ developer would dare to write a long rant about the shortcomings of C++ while at the same time nonchalantly admitting that they never made a serious attempt to learn it. One symptom of this problem is that hardly any self-proclaimed R hacker has read Matloff's book "The Art of R Programming" which was for a long time, and perhaps still is, the only book on R programming. The mere fact that there is (or was) only one such book speaks volumes.

<comment><USER17> I agree with everything here, including the praise for Matloff's book; it should be the very first book any serious R user picks up.

But Matloff is no longer alone: Hadley Wickham's _Advanced R_ is now also a must-read for R programmers.

[http://www.amazon.com/Advanced-Chapman-Hall-CRC- Series/dp/14...](http://www.amazon.com/Advanced-Chapman-Hall-CRC- Series/dp/1466586966)

<comment><USER11> And Advanced R is also available for free at [http://adv-r.had.co.nz/](http://adv-r.had.co.nz/)

</comment></comment></comment><comment><USER18> Way too many languages are trolls, or have troll features. Or in other words, too many languages have features that don't do what a reasonable person would expect them to do.

I've long considered implicit type conversion to be a troll feature, especially how Javascript does it. Another one is how differently Java treats primitives and Object types. Oracle databases treat nulls and empty strings the same.

At times like this, all I can do is lament and search in vain for a language with no troll features.

<comment><USER19> You can take a look at Rust. The authors are really careful to design an elegant C++ replacement, with no troll features and zero-cost abstractions.

</comment></comment><comment><USER20> I think this article nails exactly what's right and wrong with R.

This in particular sums up the learning curve of R.

> Thankfully, I'm long past the point where R syntax is perpetually confusing. > I'm now well into the phase where it's only frequently confusing, and I even > have high hopes of one day making it to the point where it barely confuses > me at all.

Warning personal opinion ahead...

R, the language can get you up and running alot faster than other languages for statistics like say python with Pandas or scipy but even people who use it on a daily basis will curse the languages "quirks". I find most of the confusion comes from R trying to be too friendly to the user via type conversions. The ease in which the R's type system will convert values has probably caused me more grief when first learning the language than any other issue I ran into.

And this illustrates the down side of using R

> library(Hmisc) apply(ice.cream, 2, all.is.numeric)

> …which had the desirable property of actually working. But it still wasn't > very satisfactory, because it requires loading a pretty large library > (Hmisc) with a bunch of dependencies just to do something very simple that > should really be doable in the base R distribution.

Since R is rarely a programmer's most used language, I find there tends to be an above average use of google and paste type code that pulls in 50 different packages, each of which is used on 1-2 lines of a 1000 line script. Perhaps this is just a function of most programmers not really understanding the mathematical domain and hence they slowly google and iterate their way towards a solution.

Often I'll see people pull in 5 different time series libraries just because each of them operate on a ts object, so they all can work on the same object, and each one provides one additional method the other's don't and the programmer needs to create their solution.

You'll hear people talk about writing R in the Hadley universe or the basic R universe but there isn't much talk about what a canonical R solution looks like. R is a great language in the sense that Perl and C++. It allows you to do anything but there often isn't an agreed upon way of writing it and two different programmers can come up with wildly different but valid solutions to the same problem.

<comment><USER2> I think it's also due the fact that installing R package is just one command away, install.package("abc") and library(abc) and you're done. It a blessing, but encourages loading swaths of libraries.

</comment></comment><comment><USER21> My thoughts (a little of a Rant) on R as the Lead Engineer at a data science focused company is that R is a great statistical language, but a poor programming language. I use the term programming language as a language which is very versatile for a variety of needs (web app, commandline app) such as python, ruby, etc. R has the capabilities to use as a programming language like a climbing rope can be used as a belt. It can, but shouldn't because of some points I have below.

It is great for exploratory analysis, as it is forgiving and easy to use in the console for testing things; but once it needs to be put into practice, it has issues. For a non-programmer, grasping R isn't too hard thanks to some great developers in the community.

There is a lot of good in the R community, but people are focused on making it isn't. Just look at deploying R into production, that can be a nightmare. I've spent days looking over code to figure out where an error in production lies. One of the errors was a package of a package which was updated for the first time in years. That package depended on another package which my package called another function that called the first one; basically it was a mess of dependencies. And there are some misconceptions, while doing the engineering work in R and learning I learned not to use for loops. Then one day I timed it and the for loop was 10x+ faster than any apply/plyr function including using a gpu.

The things that separate a programming language from a statistical language are a programming language have more than one of these:

* Good dependency management

* Easy deployment into production environment

* A clear way to setup environment (e.g. naming, folder conventions)

* Ability to do most of the things you want with the base packages

* Good documentation about the above.

Basically, I believe a good data scientist is someone who can use R (or something else) to explore data and then create the algorithm in a compiled language to be put in production. And for someone who just needs to create analysis for research or a paper, R is the perfect use case. R is an excellent language for its use cases, just don't think about using it for general programming. It has caused a lot of extra dev hours working on issues with it.

Little plug, we wrote a piece on hiring data scientists.[0]

[0]: [https://gastrograph.com/blogs/gastronexus/interviewing- data-...](https://gastrograph.com/blogs/gastronexus/interviewing-data-science- interns.html)

<comment><USER22> To contrast this - I'm the lead data scientist at the same company, and head over heels in love with R....

It is the only language I can quickly and efficiently jump from algebraic topology for novel pre-processing, straight into model building and validation - with just about every potential variation of every major algorithm freely available and packaged on a well curated package manager (CRAN), and then ensemble them.

I _agree_ that it's a bit difficult to use in production, and that dependency management needs work (Packrat is trying to do that), and that blindly trusting packages on CRAN can cause errors - but 98% of the time - it just works. Graphics, models, crazy niche things that are currently only used by one post-doc locked away in a top secret research lab... it all just works.

Of course, take this with a grain of salt: this is coming from a guy who's built web-servers (HTTP responses and all) in R.

<comment><USER23> R's server sockets can't select(), so unless you've reimplemented that as well, don't count on handling concurrent requests with that web server.

</comment></comment></comment><comment><USER24> My own personal rant, I think the specific feeling I get is the conceptual idea of R has long since outpaced the reality of R.

People like to fetishize data, and R sure lets you do that. The data science landscape however is growing such that R is really just a one-trick pony, however, that one trick is for better or worse being the gold standard of statistics and modeling, somehow.

But everything else wants to sugar coat the software surrounding the statistics, and leaves you no room to grow.

This is a very bad over-simplified example, but you sort of can't learn much about graphic design or good communication skills by using ggplot2 ... you can make something look very very nice, hopefully, in the general case, sure. And you can definitely do all kinds of hacks and crazy code to make it do whatever you want, but by doing that you produce ever more fragile and environment dependent code. You'd be better off learning just about anything else for graphics (Straight SVG, D3, Processing, Cairo directly, etc) because it is of course a bit more of a problem starting up, but a generalized skill set that could allow you to grow.

You also learn pretty much nothing about web development from Shiny. Shiny is a wonderful idea, but ultimately prevents a statistician from implementing what it promises, which is an analytic application. At some point, you have to ditch it and learn more traditional web stacks. It is also something of a sales funnel into a server solution that's a DDOS or security nightmare just waiting to happen.

So instead of just griping, I guess I have some ideas... it would be nice to have a Ruby/JS/Java/Python service generator. It would be nice to have a D3/React/whatver based generator. It would be nice for there to be a data munging solution (or even whole models, more like more PMML type stuff) that can be generalized into something that could be compiled or generates Python/Java/Bash/JS/Whatever code.

Ultimately you start thinking along those lines, and you realize that the promises R is making about empowering the analyst are just teasing them rather than helping.

R could do with less magic and more concentration on being simply a great statistics engine that integrates better. I guess it is that to some degree, but it sure fails the rest of the technology world that tries to live with it.

<comment><USER22> I disagree on multiple fronts!

1) ggplot does exactly what it is supposed to do: create data visualizations. It made no promises for interactivity or display, and in fact, it was originally designed for creating publication quality charts, which it continues to do well.

1.5) ggvis is a D3 API wrapper on ggplot and allows for interactive graphics. Do you want to pay your data scientists for creating production ready graphics or let them focus on what they're best at?

2) R has been growing - outside of neural networks (which R needs to catch up on), R gets almost every pre-processing and modeling algorithm first, and distributes it for free. Furthermore, it has better sampling options, metric options, augmentation options, and model ensabling tools (stack or meta-model) VS any other language or framework - it is the gold standard.

3) I don't think there's any "magic" in R. It's just a language with a learning curve and lack of opinions.

4) Last point: R is really not built for the web (it's older than Python!) - its built for data science. There's no reason you need to run your modeling stack in the same language as your application server. R is perfectly capable of writing to databases or sending API responces in JSON or PMML.

/endrant

Not trying to start a flame-war - but this type of difference in opinion is important to see when thinking about hiring data scientists or deploying models.

<comment><USER24> I sincerely appreciate your thorough and well reasoned response, and thank you for taking the time with it.

1) I agree, perhaps I was trying to allude to visualizations being more than charts. ggplot's charts are absolutely gorgeous and simpler to make than even I remember them being in Lotus 123 for DOS. However, there are some things in the periodic table of visualizations ([http://www.visual- literacy.org/periodic_table/periodic_table...](http://www.visual- literacy.org/periodic_table/periodic_table.html)) that it can't do. And what about hybrid combinations in the same chart? Could I have a bar chart where the bars are also mini-spectrograms? I can instantly think of how to do this in SVG or Processing, but I'm not sure where to begin with ggplot ... maybe it is possible. Of course why would you?

1.5) I guess I don't want to pay someone else to do the custom thing in D3 that the statistician can _almost_ do with their code, or try to get a regular web stack developer familiar with D3 to actually get it working the way the statistician says.

2) Yup, totally agree!

3) I think Shiny takes a lot of liberties and makes a lot of assumptions that users of it can't even express to me are important to them because using Shiny completely hides the underlying concepts of how it is implemented. I guess I would definitely call that magic. You're right there's quite a lack of magic in most of the language and packages, however.

4) I think data science can/should/does embrace the web. I think the modeling stack shouldn't be on the application server, but a trained model perhaps should be? I also wouldn't trust the stability of R for performance critical API calls without a lot of redundant instances and a lot of load balancing.

Anyway... the real problem is that you're also absolutely right. There is quite a bit difference in opinion between the tooling of an analysis effort, and the robustness expected by IT.

Thanks again!

</comment></comment></comment><comment><USER25> I have my fair share of problems with R, but that first example (4 ways to select a column) seems a bit silly. Just off the top of my head, I could think of plenty of ways to do the same thing in Python/pandas:

        ice_cream.icol[0]
        ice_cream['col']
        ice_cream.iloc[:, 0]
        ice_cream.loc[:, 'col']
        ice_cream.ix[:, 'col']

And if you wanted to make things more convoluted, you could also wrap things into lists like the author did in the R example. So this is definitely not a problem that is unique to R or any reasonably flexible language.

<comment><USER2> For R at least some of it is due to R's flexibility

x$name syntax stems from data frames being really lists in disguise x[["name"]] ditto, plus because it's useful to access by string (see reflection in other languages)

x[,"name"] and x[,1] because we can also apply the matrix syntax to data frames

</comment></comment><comment><USER26> Ok, but this seems pretty trivial compared to the many exclusive advantages R has. I've had minimal problems using and extending other people's software packages written in R (for bioinformatics). This has definitely not been the case with Java, R or perl, where just installing said software package is often unusually painful or impossible.

I think R is a prime example how useful a domain specific language can be. As such, I see Julia as the most viable replacement, although that will take a long, long time.

</comment><comment><USER27> So, as a code person rather than a stats one, my first reaction was that in the first example there is in fact only a single way to access a column but multiple ways to specify which one, all of which made immediate intuitive sense to me.

So I wonder if this is less about R specifically and more a feature of people approaching a language (any language) without that code geek intuition for the underlying affordances ?

</comment><comment><USER28> Most of my university classmates' first exposure to programming is using R in a statistics class. It's awful. I wish they'd make Python or something a prerequisite, so that giant swaths of people don't get turned off of computing or start with the strange ideas it teaches.

<comment><USER29> It sounds like you are arguing for imperative programming over functional programming.

<comment><USER28> R is a fine tool, but (like Java or C) not the best window for a beginner into the joy that programming can be. The syntax is pretty weird and its semantics don't align that neatly with broadly-useful ideas for reasoning about programs.

We run 3 different intro sequences in Python (for non-majors), Scheme (for most majors), and Haskell (for those who are already strong imperative programmers). They're all great.

</comment></comment></comment><comment><USER30> There are certain languages that are good for a first-time programmer.

R, despite being one of the first languages a budding "data scientist" might want to use, is probably not one of them for the many reasons given, among them:

\- there are way too many ways to do everything

\- implicit iteration (although great for statistics) makes performance issues hard to spot

\- the data structures are a bit _too_ flexible (it is Lisp-y in places), and you really need to understand them all to deploy the *apply and plyr functions effectively

\- 3+ object-oriented programming systems

\- non-standard evaluation. It's all over popular libraries like ggplot2, because it increases terseness, but it just looks like magic to beginners.

Basically, all the chapters listed here [0] -- which happens to be a great guide for experienced programmers to really understand R as a language -- happen to be the same reasons beginners give up too quickly.

Python, although it sufficiently nags me with its one-way-to-do-it motto and its many warts [1] to not want to use it regularly, is just well-rounded enough that it is a much better language for beginners. With Anaconda and iPython installed, I've found that a total programming beginner can actually get productive pretty quickly, even on stats and math problems.

[0]: [http://adv-r.had.co.nz/](http://adv-r.had.co.nz/)

[1]: [https://wiki.python.org/moin/PythonWarts](https://wiki.python.org/moin/PythonWarts)

</comment><comment><USER31> This could change your life: [http://adv-r.had.co.nz/](http://adv-r.had.co.nz/)

</comment><comment><USER32> _The upshot is that unless you carefully read the apply() documentation..., you're hosed._

One thing that jumps out at me, having returned to R after several years in the Python world, is how obtuse its documentation can be.

The standard format for R documentation does a few things that I find impede understanding. First, the help pages are organized into sections giving the high-level description, the arguments, the details, and the results ("values"). The "details" generally are organized by argument keyword, and the arguments section draws on the language laid down-- usually in a vague, high- level way-- by the description section. Finally the practical effects of the details are deferred till the results section. That means unless you already know what's going on, you end up having to jump around among sections, trying to synthesize everything.

This is particularly a problem for those help pages-- and there are a lot of them-- that describe a raft of related functions all at the same time. Describing a bunch of related functions in the same place sounds like a good idea (it should help you figure out `apply` vs `sapply`, right?). Yet this is exactly when the documentation organization results in the most scattershot reading, because in addition to having to synthesize between sections, you have to mentally prune away text that, for one reason or another, doesn't apply to your particular case (for example, because different functions don't all share the same arguments, or because you want to read about the values for just one variation on the function).

Another idiom I dislike in the standard R documentation is how the examples don't actually show any sample output. There are generally some attempts at comments to explain what the sample code should or shouldn't do, but they are very much written in the style of programmer's comments, not in the style of documentation or learning points. So you end up having to run the code, and sometimes puzzle over the results for a while.

Here's an example, from the help page that I happen to have open right now, `help(sample)`:

         # sample()'s surprise -- example
         x <- 1:10
             sample(x[x >  8]) # length 2
             sample(x[x >  9]) # oops -- length 10!
             sample(x[x > 10]) # length 0

The comments alert me that there's a "surprise" in store, and they even allude to the (apparently surprising) fact that the second line produces a 10-vector. Notably lacking is any explanation of what's meant to be surprising here, how that relates to the internal logic of `sample`, or how to avoid falling into the trap.

Overall, I feel like R's documentation is a bit like a conversation among experts, with a rather sink-or-swim attitude towards newcomers.

Documentation is far from the first thing that stands out about R vs Python, but it's the most salient, I think, in the context of the original article.

<comment><USER33> > This is particularly a problem for those help pages-- and there are a lot of > them-- that describe a raft of related functions all at the same time. > Describing a bunch of related functions in the same place sounds like a good > idea (it should help you figure out `apply` vs `sapply`, right?). Yet this > is exactly when the documentation organization results in the most > scattershot reading, because in addition to having to synthesize between > sections, you have to mentally prune away text that, for one reason or > another, doesn't apply to your particular case (for example, because > different functions don't all share the same arguments, or because you want > to read about the values for just one variation on the function).

This reminds me very strongly of man pages. Man pages group either similar (man 3 printf) or closely related (man 3 malloc) functions, and intersperses bits about each of the functions documented by the page, which ranges from difficult to read to mind-boggling (when you have half a dozen near-identical functions being documented at the same time). Reading an lapply documentation page[0] it looks very similar in organisation, and similarly difficult to parse/use.

> The comments alert me that there's a "surprise" in store, and they even > allude to the (apparently surprising) fact that the second line produces a > 10-vector. Notably lacking is any explanation of what's meant to be > surprising here, how that relates to the internal logic of `sample`, or how > to avoid falling into the trap.

On [http://www.inside-r.org/r-doc/base/sample](http://www.inside-r.org/r-doc/base/sample) the surprise is explained by the first paragraph of the details, with the hell of an understatement that "this convenience feature may lead to undesired behaviour" but without the big red blinking box it would definitely deserve.

[0] [https://stat.ethz.ch/R-manual/R-devel/library/base/html/lapp...](https://stat.ethz.ch/R-manual/R-devel/library/base/html/lapply.html)

</comment></comment><comment><USER34> Not intending to start a language war here, but if somebody who has experience with both R and Python/pandas/etc could answer - how's the current state of the emerging Python data/statistics ecosystem compared to R? (not counting all the other differences like R being allegedly weird or Python more general purpose and so on).

<comment><USER35> We did an evaluation recently. Not even close.

<comment><USER34> Is that evaluation somehow public, or could you share some details?

</comment></comment></comment><comment><USER36> I think if you are a programmer or have some programming language experience, R is not very weird. But if you are a financial analyst or a social scientist, or a statistician, and only want to get your work done; it depends on your first programming language. If it was S3 you are golden. If it was Basic, you are not so golden. Mine was LISP.

</comment><comment><USER37> I just introduced a friend of mine to R. He's working on his PhD in microbiology and beside himself once he started working with R. Personally, I can't believe he hadn't used it before. It really is a beautiful language to work with once you get a handle on it.

</comment><comment><USER38> The only issue I have with R is when exposing it as a web service R is not great. For example if using R you will need one container for "dployr" and another for your web service. It's not the end of the world but more moving parts means more problems.

</comment><comment><USER39> Maybe R should have optional "training wheels" that produce a warning every time an implicit conversion happens. In the OP's case, it would warn that a data frame was implicitly being converted to a matrix, and maybe also warn that the numeric vectors within were being converted to character in order to get slotted into that matrix.

</comment><comment><USER40> R is great language but at the same time it can be a real pain.

Sometimes I imagine that some very wise guy designs a language much more consise and coherent, that could at the same time take advantage of the huge number of existing libraries written in R and C++... Maybe it's a dream but so many times I wonder if that's even be possible.

</comment><comment><USER41> At my previous job we used to play "Guess what R does" over lunch. Someone would write a few R statements and we'd have to guess the output. Extremely difficult!

        >> a=c(1,2,3,4)
        >> b=c(1,2)
        >> a+b

Any guesses?

<comment><USER42> \+ is a vector operation, and does it elementwise. R recycles vectors. You get warnings if there are elements left over. This is something you should know within the first 5 minutes of learning the language, hopefully?

</comment></comment><comment><USER23> Yes, I'm well aware of R's many faults, I have my own long list of R caveats I hand to new hires, but not bothering to learn the damn language is no reason to complain about it. First, RTFM.

<comment><USER6> look, I am all for RTFM but my experience with R has been a different case in my experience. Can I make it do powerful things? yes. can I take code that wont run, copy it to a new file and have it run? yes.

1) There are just quirks in implementation that are nonintuitive. I constantly find myself doing things I would do in other languages, to do simple tasks, which fail for no good reason, albeit an obvious one once I find the right documentation.

2) The manual you describe is flat out unhelpful in many cases. The suggestions that constantly come about "check stack / google" are suggestive of just how poor that documentation is

<comment><USER31> You wouldn't find it intuitive if your first language was Scheme.

<comment><USER6> absolutely fair enough

</comment></comment></comment></comment><comment><USER43> ITT: people who don't understand R complain about R.

</comment><comment><USER44> Ah, the joys of a dynamic language and its implicit conversions.

</comment><comment><USER45> previous discussion: [https://news.ycombinator.com/item?id=5450097](https://news.ycombinator.com/item?id=5450097)</comment>


Building the back-end of the Tour of California "Tour Tracker" using Flex Data Services - <AUTHOR> http://coenraets.org/blog/2007/02/building-the-back-end-of-the-tour-of-california-%E2%80%9Ctour-tracker%E2%80%9D-using-flex-data-services/ <comment><AUTHOR> Kind of out of date, but it seems interesting, and I love cycling:-)</comment>


Show HN: 3months working on this Android app with a friend. Would Love feedback. - <AUTHOR> http://echosystem.im/

<comment><USER2> Does these "echoes" ever expire? Are they permanent?

Seems like you use an image for a map, is this true/what's the reason?

<comment><AUTHOR> Echoes (not messages) expire after 7 days. As long as a message gets echoed it can live on indefinitely.

There's no killer reasoning behind using an image for maps. We could be using the Google Maps API instead though right now it lets you share the actual image. We don't consider the maps to be overly important.

<comment><USER3> That's a mistake, IMHO. You're pushing a LOT more data over the air by sharing an image versus a URL to a google map. Additionally, Google has partner adverts on those maps that they get revenue from, and if you get enough traffic viewing the maps, you can go to them and get a revshare.

When people start using it to broadcast events like accidents, fires, etc., you're going to want to use URLs, not pics.

<comment><AUTHOR> Problem with sharing URLs is that people would be able to zoom in and see exactly where the messages/echoes come from. Not all of our users would be comfortable with that.

<comment><USER3> You wouldn't want to share a location with every message, but rather give users the "choice" to share location for any given message they post.

If they've just seen an accident, they'll want to post a URL. If they're at home, not likely.

You might even ask users to "mark" private locations from which location can't be sent, like school, home, or work.

You could also allow the user to vary the accuracy of the position by zooming in/out, to give them control of proximity for their posted locations.

</comment></comment></comment></comment></comment><comment><USER4> Great idea. I would test but currently no access to an android device.

Good competition in this category as of late as many people are entering. Think of it as a positive because it is validating your idea.

</comment><comment><USER5> I love this idea.

Is there a reason why you developed this as android app and not as a "normal" mobile website (navigator.geolocation)?

<comment><AUTHOR> We're planning on doing a "normal" web app as well. :)

</comment></comment><comment><USER6> Awesome idea! I'd be quick in developing it for other platforms as these ideas like this don't unique for long :)

</comment><comment><USER7> Yeah I love this. I think someone at Darden at UVa is working on something similar, or that you?

<comment><AUTHOR> It isn't us, do you remember their name?

<comment><USER7> I'll give them a shout. QUITE possible by the this time their service has become something could be totally complimentary to yours and you guys could connect some dots.

<comment><AUTHOR> That would be great. We're actually looking for partnerships that might allow us to publish content from sources other than users.

</comment></comment></comment></comment><comment><USER3> Feedback..

a) Nice clean UI.

b) Move send/cancel to top or side, away from the word-suggestion-list. I kept cancelling when choosing words from the word list as I typed.

c) Any way to allow me to choose the radius? 21km seems arbitrary. I might want just people on my block to see it, or people in Dallas/Fort Worth (50km away). Obviously there should be an upper limit, but that could also be opened for a price, say for political campaigns.

<comment><AUTHOR> b) yeah that was recently introduced and seems to be causing an issue with some users.

c) the radius is actually dynamic (21km is the upper limit currently) and varies depending on the activity: the more activity, the smaller the radius, so that you always receive a manageable number of messages.

</comment></comment><comment><USER3> In thinking about this, you're going to want to develop an API that lets advertisers send messages to users within a range of a location, probably referenced by lat/long. Allow users to turn off ads sent by advertisers, and develop some sort of commerce..

For example, you can send 2 messages a day. If you respond to an advertiser, you get 5 message credits... Of course I'd want to choose the advertisers I could get messages from, if any.

<comment><AUTHOR> Well we're definitely thinking about advertisements and our early users are already using the service to post ads, some business owners even offer reductions (20% off if you come by in the next 2 hours, stuff like that).

I don't know about limiting the number of messages per user per day though. If we go that way, why not just charge to post more messages and forego the need for advertisers altogether?

<comment><USER3> Well, if I got the app, and some idiot started posting racist rhetoric or links to pics of their penis, i'd rather get fewer than an unlimited amount.

Additionally, people should be able to block posters, and the weight of those blocks can ban a user if there are enough and the velocity is high.

In that vein, it would seem that an IRC approach with "channels" might be better, so that you can have a private "channel" with your friends nearby, or move into the "starbucks" channel to get deals and updates from your local Starbucks.

Perhaps allow people to create "private" channels, by invite only, if they buy the paid version of the app..

<comment><AUTHOR> We have a reporting system planned and once (if we ever) get enough users/messages adding categories would make a lot of sense.

I like the idea of private channels.

<comment><USER3> Think about ease of use here. It should allow people to "subscribe" to channels or categories rather than have to click, click, click to change channel/category. What they get is a "stream" of echos that are mixed together that they can filter out.

If it's more CraigsList in nature, I don't think it will have the staying power.

<comment><AUTHOR> Agreed, a subscribing system is much better.

</comment></comment></comment></comment></comment></comment><comment><USER3> FYI... I get an "Error retrieving information from server [RPC:AEC:0]" when I try to install this from Google Play.

<comment><AUTHOR> That's an issue with Google Play unfortunately. :/

<comment><USER3> It's working now.

</comment></comment></comment><comment><USER3> This is the beginning of something BIG.</comment>


Most British men, and women over 30 with property, got the right to vote in 1918 - <AUTHOR> https://en.wikipedia.org/wiki/Representation_of_the_People_Act_1918 <comment><USER2> In 1902, Australia was the first country in the world to give women both the right to vote in federal elections and also the right to be elected to parliament on a national basis.</comment>


Apple Buys $6k North Carolina home for $1.7million, building massive data center - <AUTHOR> http://www.dailymail.co.uk/news/article-1318991/Apple-buys-Donnie-Kathy-Fulbrights-Maiden-North-Carolina-home-1-7million.html <comment><USER2> The house cost 6k, 34 years ago. That's not the value of it today. Very misleading.

<comment><USER3> True... today, it would have cost upwards of $150k.

</comment></comment><comment><USER4> Microsoft would have just used eminent domain. (Ok, just kidding. Microsoft actually built a campus near Seattle where, because the owners of some of the homes wouldn't sell, they built the campus around the homes and integrated the landscaping with the campus.)

Anyway, classy move on Apple's part. They found the price that made it worth while for the sellers and paid it.</comment>


Automatic Scheduling Tool for Email - <AUTHOR> https://caramelbot.herokuapp.com/ <comment><AUTHOR> (OP) Forwarding to email@example.com kicks off automatic email sending and parsing to schedule a 30 minute block of time in your Google calendar for a phone call or meeting. Caramel sends emails from your address, so the person you are scheduling with should not be able to notice. We are working on this to help our friends who work as recruiters, but we think it could be used for any scheduling use case.

<comment><USER2> You don't have a domain name, no text on the website, no contact info and you ask users to give you read and write access to their email account?

<comment><AUTHOR> Yeah, we totally understand that - we're very early stage, just hoping to get some people's initial thoughts. Did you see the video of the run through? Any thoughts on that? We're adding more info to the page now, please come back and try again in the future! You can contact us at firstname.lastname@example.com

<comment><USER2> Description looks good, though I'd still look for more social proof (Is this a real company? Are they stealing my password? What if I no longer want to give them access?). I like the logo and favicon.

I don't use Gmail myself so I can't test it right now.</comment></comment></comment></comment>


Interview with Atari founder Nolan Bushnell - <AUTHOR> http://www.spiegel.de/international/0,1518,512798,00.html <comment><USER2> "[Steve Jobs] did Breakout, one of my favorite games. I had the original concept, and he did the execution of it, together with Steve Wozniak."

Wow! Is that common knowledge? That's as surprising to me as Orson Scott Card writing the sword-fighting insults for The Secret of Monkey Island.

</comment><comment><USER3> _I think "Grand Theft Auto" is a horrible game. It's as close to pornography for the game business as you can get_

Wrong:

(At bottom) <http://www.seanbaby.com/nes/atari2600.htm>

<http://www.seanbaby.com/nes/egm09.htm>

</comment><comment><USER4> What an odd way to start an interview.</comment>


Ask HN: Anyone knows a thing or two about hosting a Web.Py app on Heroku - <AUTHOR>

<comment><USER2> On the top of my head, I believe it's the same as hosting a Flask app with some differences [1]. But really a quick google search [2] answers your question. Here are some resources found from the search [3][4]. And hey look, something from github [5]

Hope it helps

[1] [https://devcenter.heroku.com/articles/getting-started- with-p...](https://devcenter.heroku.com/articles/getting-started-with-python)

[2] [https://www.google.com.au/#q=webpy+heroku](https://www.google.com.au/#q=webpy+heroku)

[3] [https://coderwall.com/p/g4tqoa](https://coderwall.com/p/g4tqoa)

[4] [http://www.artima.com/weblogs/viewpost.jsp?thread=335549](http://www.artima.com/weblogs/viewpost.jsp?thread=335549)

[5] [https://github.com/CalumJEadie/basic-webpy-heroku- app](https://github.com/CalumJEadie/basic-webpy-heroku-app)

<comment><AUTHOR> Thanks very much

</comment></comment><comment><USER3> [https://github.com/mjhea0/web2py-heroku](https://github.com/mjhea0/web2py- heroku)</comment>


A Letter to Donald Trump - <AUTHOR> http://blog.dilbert.com/post/140353736681/a-letter-to-donald-trump-from-a-voter-not-me <comment><AUTHOR> For those not aware, Scott Adams, a democrat[1] who is well educated in politics and persuasion, has been praising Trump for his methodology. He's written a series of entries dissecting the different manoeuvres the Trump campaign is practicing. Scott is seemingly well regarded here, and I think it's commendable that he tries to separate the machine from the message.

Trump's campaign, like him or not, is a startup-lesson in promotion and survivability.

[1] reading this: [https://en.wikipedia.org/wiki/Scott_Adams](https://en.wikipedia.org/wiki/Scott_Adams) I'm a bit unsure now.

<comment><USER2> Scott Adams is also the dude who is only prevented from going on a murder spree by a regular hugging schedule ([http://blog.dilbert.com/post/133406477506/global-gender- war](http://blog.dilbert.com/post/133406477506/global-gender-war)).

</comment></comment><comment><USER3> Is this satire?

<comment><USER4> Probably not - Scott Adams is fairly "Men's Right"y[1] and this plays right into that.

[1] [http://www.wehuntedthemammoth.com/?s=scott+adams](http://www.wehuntedthemammoth.com/?s=scott+adams)</comment></comment>


Tabs vs spaces for indentation - <AUTHOR> http://nithinbekal.com/2011/tabs-vs-spaces-for-indentation/

<comment><USER2> This probably won't be settled in an HN thread but for what it's worth, I like spaces (Python). The other religious war that seems unresolvable is where to put braces in languages like PHP. What drove me nuts was the more common Allman style with braces on new lines. Thank goodness I'm on Python now. The tighter code is so much more pleasant to look at and work with.</comment>


Zealandia: Earth's 8th Continent - <AUTHOR> https://data.gns.cri.nz/tez/index.html?content=/mapservice/Content/Zealandia/Home.html <comment><AUTHOR> A better link is [https://data.gns.cri.nz/mapservice/Content/Zealandia/science...](https://data.gns.cri.nz/mapservice/Content/Zealandia/science/8cont.html) (The frames prevented me from linking to the page I thought I linked to)</comment>


This Design Generation Has Failed, should designers be licensed? - <AUTHOR> https://www.fastcodesign.com/90161166/this-design-generation-has-failed <comment><USER2> How many of you would buy a painting from an unlicensed artist or get your hair cut by an unlicensed hair stylist?

A doctor is not the same thing as an artist.

<comment><USER3> I don't take the licensing point seriously. I see it more as an analogy for external accountability.

Let's agree that licensing is wrong. There's still the issue of nefarious and self-serving design that's caused a lot of real harm, and the decision-makers and creators don't see a problem. They don't have to.</comment></comment>


Interactive Beginners Course to AngularJS - <AUTHOR> http://www.zerocensorship.com/bbs/show_topic/24546-sps-programming-series-build-a-red-board-with-angularjs-part-1

<comment><AUTHOR> This is part 1. Part 2 is coming soon.</comment>


Faking votes on Hacker News - <AUTHOR> http://xach.livejournal.com/214252.html <comment><USER2> Not cool. We deliberately don't put that much effort into security, because this is a community based on trust, not a bank. And by choosing to publish this rather than e.g. simply sending me an email about it, he's inviting people to do this.

<comment><USER3> Hilarious. The head of "Hacker News" is mad because his news has been hacked.

<comment><USER4> It was an interesting manipulation of the system, but as pointed out it's a dangerous slope. A community based on trust will sour very quickly if a lot of these tricks pop up.

Sharing the trick is entirely reasonable: small hacks like this are something to be proud of, given that you've acted in a reasonable way (e.g. contacted the site and informed them before telling others, not actually using it game the system, etc.)

Could have gone that way. Didn't.

<comment><USER3> Hackers should know how to secure their own website. Between this and the JS injection hack (from the same fellow), it's clear that security is porous at best.

<comment><USER5> As a kid I never understood why some of the kinds made it a hobby to trash the sandcastles built by the others. It was an interesting phenomenon to watch :)

Maybe they thought that if they wanted to, they can do better, but they never did.

<comment><USER3> Or maybe it's a cop-out to say that you didn't care about your sand castle's security in the first place. If you knew of a way to keep it from getting knocked over, you'd use it.

<comment><USER6> Being an asshole is just that - being an asshole.

It doesn't really involve anyone else.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> It's worth having a link to <http://en.wikipedia.org/wiki/Cross- site_request_forgery>

Something to think about for your own applications

</comment><comment><USER8> You wouldn't necessarily need someone to volunteer their username to make this work. This unfixed and ancient (2002!) browser vulnerability leaks information, via the styling of 'visited' links, about other URLs you've visited:

<http://seclists.org/bugtraq/2002/Feb/0271.html>

In many cases, the only person who will have visited all of...

<http://news.ycombinator.com/threads?id=USERNAME>

<http://news.ycombinator.com/submitted?id=USERNAME>

<http://news.ycombinator.com/saved?id=USERNAME>

<http://news.ycombinator.com/user?id=USERNAME>

...is USERNAME. So another exploit -- still sneaky but not quite fraudulent, and not especially unique to HN -- would be to design an offsite page that does one or both of (1) greets HN users by name upon their visit; (2) logs which of some chosen set of HN users has visited the page.

<comment><USER9> True. You'd still need to brute force USERNAME, but it's much faster to do that in JavaScript than issuing a million HTTP requests.

<comment><USER8> If by 'brute force' you mean 'iterate through all legal usernames', I hadn't even thought of that!

I would expect someone instead to pick the leaderboard, or some other extant set of names (eg: Google [site:news.ycombinator.com inurl:user]), and just iterate over those.

(Sad aside: try that query at Google or Yahoo, and review the top 100 results. An awful lot of the usernames ranking highest are drug names.)

<comment><USER9> Yeah, I meant brute force over all registered usernames. I wrote a page that used the vulnerability you mentioned to check to see if a user has visited any of the top 100,000 websites: <http://tlrobinson.net/misc/history.html> (it seems to be broken now though) and it can churn through 100,000 tests in a few seconds.

</comment></comment></comment></comment><comment><USER10> I fell for the trickery(admittedly my mistake for trusting an unknown website) and submitted my user name, expecting to receive a graph like the page promised.

However, as pg already pointed out it was totally uncool not notifying him before making it public. I am in the support of full but responsible disclosure. So maybe he could have published it after informing pg and the issue was taken care of.

<comment><USER11> Taking it public _is_ a fix. Now that this information is public none of us will give out our usernames to external websites, thus ending the problem. In effect Xach's could decide between emailing someone hoping they fix the problem, or just fixing it.

I found this whole event funny. I'm also amused that people reacted as negatively to this prank as middle managers at my old $MEGACORP job would.

<comment><AUTHOR>
        Now that this information is public none of us
        will give out our usernames to external websites,
        thus ending the problem.

Correct me if I'm wrong, as I'm NOT a web guru, but I think there are three ways to get the user names, and it's enough if this only works in some cases:

(1) Brute force (look at who's currently active on the site)

(2) Look at browser history (HN users have to constantly look at their own profile to check for replies, and the URL contains their user name)

(3) Send whatever request the browser sends to HN normally, and gets the user name embedded in the page.

Again, I don't know enough about browsers/JS/HTTP/HN to know if any of the above would work. I'm just saying I'm not sure that explicitly giving out your user name is required for this.

Edit: typos

</comment></comment></comment><comment><USER12> Some context:

[http://www.reddit.com/r/programming/comments/67gu9/take_the_...](http://www.reddit.com/r/programming/comments/67gu9/take_the_arc_challenge/c032kur)

</comment><comment><USER13> Well done, you proved two things: 1) that you can write script that does an http get and 2) that you should not be trusted.

Was that a net gain for you?

<comment><AUTHOR> For the record, I'm not xach. I just saw this on Programming Reddit.

Edit: link [http://www.reddit.com/r/programming/comments/854w0/faking_vo...](http://www.reddit.com/r/programming/comments/854w0/faking_votes_on_hacker_news/)

<comment><USER13> OK. I direct my comment at xach (since I can't edit it any more).

</comment></comment></comment><comment><USER6> What's really stupid about all this is that I give fellow users on this site a little bit of trust because I know that many times, they would like advice or help with their projects, or conversely, they have stumbled on something I can learn.

So I don't worry too much about giving my user name out, or entering it into other HN members' apps. I did it, and I'm not worried about it really. It's not like run4yourlives is my bank id or anything.

What bothers me about the whole thing though is that I've now had it confirmed that HN is too big to trust anymore. Whereas before, there was a sense of kinship with people here - none of whom I've ever met - I now have to worry that some of them are just losers looking to exploit my trust.

That's worse than off topic posts and low quality comments really. It's an attack on the fabric of the community, and the value of the users. It's clear now that I must treat HN as I would treat reddit or digg or any other room full of potential idiots; people who would much rather exploit trust than build it.

Sad but inevitable I suppose.

<comment><USER14> Honestly, what have you lost? Nothing. The truth is that you shouldn't be trusting a bunch of people you've never met ANYWAY. Nobody's asking you to give them your address or mother's maiden name, but you wouldn't give those out if asked by a fellow member anyway. You should always be wary of sites asking for your information for whatever reason, and just because you trust some of the people on HN doesn't mean there aren't tons more on here that could possibly deceive you.

People seem to react to this like like the record companies reacted to Napster. "OH NO! IT'LL KILL US ALL! Screw changing our ancient business model, we'll just SUE 'EM!"

Instead of updating the way you think about HN (and other sites) you choose to put down the person who enlightened you and cast him out as some sort of heretic.

Hackers INVENT, hackers BREAK STUFF, and hackers BRING OUT THE UGLY! Why is Xach getting martyred for being a real hacker?

Besides, he's giving HN huge publicity. Jeff Atwood twittered about this thread.

<comment><USER15> I don't know whether you've been paying much attention to some of the threads lately but HN is trying to maintain a particular feel. It's huge publicity that begins to erode HN and turn it into something that many of us would rather avoid.

<comment><USER14> "Huge publicity"... but it's already publicly advertised in many places, many big names are blogging/twittering about it, did you really expect everyone to ignore it? If it's got such a good feel to it, why can't everyone else get in on that? So far all I've seen is elitism, both in comments I'm reading and the replies to my own (first) comment. Hackers aren't supposed to like elitism. We're supposed to promote the sharing of knowledge, information, freely and openly, you know... because that's how the world should be. Or so we say. But I haven't seen that here. I've seen the typical elitist social community, with the people who've been here "longer" running the show aside from the admin.

Decided to end my thought there, it was running a little long...

</comment></comment></comment></comment><comment><USER16> Am I wrong, or is this just saying HN is CSRF-able? There are commerce apps that are still CSRF-able. And this is a comparatively clumsy attack, since there's no trivial way to get your username blindly.

<comment><USER9> Yes, I think it's considered CSRF, but indeed it's not as bad as it could have been, since it still requires you know the username of the logged in user.

It's also nowhere near as bad as the state of the Twitter API and apps, which require a username _and_ password. People don't think twice about providing unlimited access to their Twitter account to random websites. Hopefully the OAuth API will fix that.

@pg: I think one solution would be to reject any vote requests with a Referrer header other than news.ycombinator.com

<comment><USER16> Referer is totally insecure.

If all it is is votes, I say the right solution is "let it go".

<comment><USER9> AFAIK, checking the Referer header actually works for preventing CSRF because you can't modify it for the types of requests that work cross domain, i.e. loading <img>, <script>, etc tags, or posting forms.

<comment><USER16> Your assumption here isn't crazy, but it depends on the browser, and you shouldn't rely on it.</comment></comment></comment></comment></comment>


Are black holes made of dark energy? - <AUTHOR> https://phys.org/news/2019-09-black-holes-dark-energy.html <comment><USER2> Perhaps the singularity is crushing matter into exotic matter and the effects of the exotic matter are like dark energy.</comment>