Ask YC: Where do you advertise online? - <AUTHOR> I've had some success with Adwords, Yahoo's equiv, FB and StumbleUpon.  Where else do you suggest? <comment><USER2> Currently Google Adwords (Google Search only) and Microsoft's Live.com. Those two are the only options I've found worth bothering with for B2B software at this time.

We tried Yahoo: It's a complete waste of time and money. Ads were always edited by Yahoo staff (requiring frequent e-mails to clarify the service we were paying for), bids may be changed at random, the interface is a nightmare kludge and there is no way to opt out of Yahoo's 'partner network' (which seems to consist only of spam domain landing pages), so bidding a keyword to the top of the Yahoo search results guarantees a load of expensive visitors from click-farms. I would love to advertise on Yahoo's search result pages and will do so the moment Yahoo Search Marketing is taken over by a competently run organization (Go Microsoft!).

We tried Ask.com: You'll receive a tremendous number of visitors on your first day, all from spam domain landing pages. There is no way to specify "place my ads on Ask.com search results only" (which I'd genuinely like to do), so money given directly to them is wasted. Crazily enough, you can cancel your Ask.com advertising and opt into using Google's "Search Network" instead. That will put your ads on Ask's search results without having to deal with Ask.

</comment><comment><USER3> Mechanical Turk is good for getting initial users to use your site and "test it". Offer them $.10 to test your site and give you some feedback on the site. It's a good way to get initial beta testers.

<comment><USER4> Are you able to set a top-limit cap on the amount you spend or the number of users?

I'd be interested in hearing real numbers, in regards to how much you had to invest in Mechanical Turk to get a decent response to further your application.

</comment></comment><comment><USER5> I have tried AdWords and Facebook. They worked in the sense that people visited my site, but they did not work in the sense that no one bought anything from me; however that may be due to my site and product, not the advertising.

</comment><comment><USER6> I think internet advertising for web apps is pretty much useless. Sure it might drive you some traffic, but you most likely won't get a lot of sales. So unless you have a $100 profit margin on each user, you won't recover the money that you'll spend on ads.

</comment><comment><USER7> Affiliate Marketing: Commission Junction, PepperJam Network...

Twitter: using Twitter Search to monitor certain keywords and follow up with users.

</comment><comment><USER8> (Posting from a junk account just to keep things a bit more anonymous.)

The company I work for spends over $50,000 daily on advertising, for a purely virtual (downloadable software) product. This is almost, but not quite, exclusively search advertising. Dollar-wise, over the past few months, the split is:

Google: 87.2% Yahoo: 8.8% MSN: 2.4% Ask: 1.0%

With LookSmart, CJ, NeverBlue and Right Media taking up the sub-one-percent slack.

This is (like other people have noted) largely influenced by what our product is. Search marketing (as opposed to display) is by far best for us, and Google is by far best of search. There is a chance there are some campaigns I've missed.

</comment><comment><USER9> Depends on your product some. You might also look into MySpace advertising-- it's wicked easy to try out in their beta ad manager, but I find that the CPC is pretty high for toying around with at first.

StumbleUpon seems to be a good one for interesting/clever sites in terms of conversions, and the effective CPC is around $0.05.

With Adwords, there's some fun things digging through and finding keywords your competitors aren't really looking at. There's also a lot of people overlooking keywords in unconventional ordering of the words.

</comment><comment><USER10> Adwords has worked for my business. You really need to invest time and money into it. It was only after my first $3k and 3 months that I started seeing it work.

</comment><comment><USER11> With the proviso that its going to either take a LOT of time or using Conversion Optimizer, I suggest taking a look at Google's (AdWords) Content Network. It is far and away the most effective advertising I am able to do, consistently clocking even AdWords on google.com

I'm told that experience isn't that common.

</comment><comment><USER12> i'm jaded but adroll is good for niche targeting.</comment>


The Russian "Firehose of Falsehood" Propaganda Model [pdf] - <AUTHOR> https://www.rand.org/content/dam/rand/pubs/perspectives/PE100/PE198/RAND_PE198.pdf <comment><USER2> > The persuasive benefits that Russian propagandists gain from presenting the > first version of events (which then must be dislodged by true accounts at > much greater effort) could be removed if the true accounts were instead > presented first.

Or at all. Just about every news outlet threw credibility away in a frenzy of mass hysteria these last 18 months. There's simply few bastions of impartiality left.

> corrections that provide an alternative story to help fill the resulting gap > in understanding when false "facts" are removed.

So, like "alternative facts"?

> Our fourth suggestion for responding to Russian propaganda: Compete!

A bigger, better firehose! One _on the right side of history_ ™.

The sad reality is that people don't care about the truth nearly as much as they care about information which validates their worldview. The market acknowledges this and behaves accordingly.

Furthermore, not all truths are equally palpable and I'd argue that repeated censorship of uncomfortable/offensive truths has caused a breach of trust so wide that it has cast doubt on sources of information as a whole. See the 'Fake News' phenomenon.

It's from this set of experiences that people are lured to RT and 'alternative' sources of news. The next thing you know they're buying a years supply of Survival Shield X-2 Nascent iodine on infowars.

</comment><comment><USER3> The strategy the article suggests is basically

1\. Don't argue with the disinfo trolls. Instead, counter disinformation trolls with your own disinformation trolls.

2\. _" both NATO and the United States have a range of capabilities to inform, influence, and persuade selected target audiences. Increase the flow of persuasive information and start to compete, seeking to generate effects that support U.S. and NATO objectives"_

3\. _" then jamming, corrupting, degrading, destroying, usurping, or otherwise interfering with the ability of the propagan- dists to broadcast and disseminate their messages could diminish the impact of their efforts."_

So basically create your own fake news, hire a tonne of social media shills and finally, start blocking websites and banning any social media users that disagree with the desired narrative. Scary :_)

<comment><USER4> > both NATO and the United States have a range of capabilities to inform, > influence, and persuade selected target audiences. Increase the flow of > persuasive information and start to compete, seeking to generate effects > that support U.S. and NATO objectives

Yeah, it's called JTRIG. There's a reason why Eglin Air Force Base was declared 'the most reddit addicted city', and then the blog post was deleted. [https://web.archive.org/web/20160604042751/http://www.reddit...](https://web.archive.org/web/20160604042751/http://www.redditblog.com/2013/05/get- ready-for-global-reddit-meetup-day.html)

<comment><USER5> I can emphatically say that the post in question was not deleted. I don't know why you would think that since you can visit the live post in question via the wayback machine link you posted.

The mention of Eglin Air Force Base is preserved too, but I don't see any connection between an Air Force base in the Florida panhandle and a unit that belongs to the GCHQ in the United Kingdom.

</comment></comment></comment><comment><USER6> Maskirovka.

To me, this deliberate sowing of confusion in the mind of you enemy is a continuation of well established Russian military doctrine that's gone in to overdrive.

Around the time of MH17 there was a short radio documentary on Maskirovka on the bbc: [http://www.bbc.co.uk/programmes/b050674y](http://www.bbc.co.uk/programmes/b050674y)

</comment><comment><USER7> I wonder if 'fake news' will become the next excuse to encroach on our liberties just like how 'terrorism' is used.

<comment><USER8> It's almost elegant the way the Trump camp seized on the term 'fake news' that was first used to classify this new brand of viral make-believe that flourished among Trump-supporters on social media, and somehow turned it into a catch all term to just dismiss any reporting that they deem unfavorable. When you have an audience not accustomed to critical thinking or fact- checking, there is almost no repercussion to making claims that are demonstrably false, or dismissing things that are demonstrably true. Everything is just opinion versus opinion. At this point, the fight isn't even about policy anymore, it's about the very meaning of words, how we as humans determine what reality is. The Last Week Tonight segment, [https://www.youtube.com/watch?v=xecEV4dSAXE](https://www.youtube.com/watch?v=xecEV4dSAXE) about how Trump gets his 'information' is fascinating - he's essentially managed to have his own misinformation fed back to himself in a feedback loop.

</comment></comment><comment><USER9> It's worth also keeping in mind there may be _old_ Russian propaganda models of 1930's memetic warfare still kicking around.

[http://esr.ibiblio.org/?p=218](http://esr.ibiblio.org/?p=218)

I'm not sure either of these should be called strictly Russian, in either invention or execution, though.

</comment><comment><USER10> Hillary disagrees [https://www.youtube.com/watch?v=L6sYB5d1Bu4](https://www.youtube.com/watch?v=L6sYB5d1Bu4) As far as I'm concerned RT is as much propaganda as CNN, BBC, Chanel 4, Fox news... All main news outlets lack real impartial ivestigative journalism, that covers both sides of the arguments.

The interest for alternative, and sometimes less capable, media only exists because of how biased and rotten the "real news" are.

<comment><USER11> That is exactly the response propagandists try to elicit.

Congratulations -- you are an example of the modern form of "useful idiot".

<comment><USER10> You don't look like a very useful one</comment></comment></comment>


The Excuse – When You Need to Get Out of Work - <AUTHOR> http://www.theexcuse.co.uk <comment><USER2> Not sure, but doesn't this tantamount to lying at your employer? For example, I see the Doctor's Note option there. In places where health practice is heavily regulated, this could haunt you back as your employer could trace that doctor's note and they could easily dismiss you for misleading information.

I am also a bit worried about the other notes as a fraudulent in nature, which in some countries constitute a higher penalty.</comment>


Faust: Stream Processing for Python - <AUTHOR> https://github.com/robinhood/faust <comment><USER2> > Faust is extremely easy to use [...] Faust only requires Kafka, the rest is > just Python

Kafka is still a pretty chunky dependency.

Have you thought about getting this to work with the new streams stuff in Redis? [https://brandur.org/redis-streams](https://brandur.org/redis-streams)

Redis is SO MUCH less hassle to get running (in both dev and production) than Kafka.

<comment><USER3> My name is Ask and I'm the co-creator of this project, along with Vineet.

Yes, we're definitely interested in supporting Redis Streams!

Faust is designed to support different brokers, but Kafka is the only implementation as of now.

<comment><USER2> Well I love Celery, so I'm even more excited to learn more about Faust now :)

<comment><USER4> If you liked Celery 3.x but don't like all the bugs in Celery 4.x, check out these alternative Python task queues:

[https://github.com/closeio/tasktiger](https://github.com/closeio/tasktiger) (supports subqueues to prevent users bottlenecking each other)

[https://github.com/Bogdanp/dramatiq](https://github.com/Bogdanp/dramatiq) (high message throughput)

<comment><USER3> In Faust we've had the ability to take a very different approach towards quality control. We have a cloud integration testing setup, that actually runs a series of Faust apps in production. We do chaos testing: randomly terminating workers, randomly blocking network to Kafka, and much more. All the while monitoring the health of the apps, and the consistency of the results that they produce.

If you have a Faust app that depends on a particular feature we strongly suggest you submit it as an integration test for us to run.

Hopefully some day Celery will be able to take the same approach, but running cloud servers cost money that the project does not have.

</comment></comment></comment></comment></comment><comment><USER5> I don't see any discussion of idempotent processing or the Kafka transactions feature in the documentation, and I also see a mention of acking unprocessed messages in the form of acking if an exception is thrown in the application.

These seem like pretty important details to acknowledge up front.

Are there plans to support idempotent processing, or is this already implemented and I just missed it?

The developer facing API looks very nice!

<comment><USER6> It's hard to say, but Kafka provides a number of important predicates for idempotent processing out of the box for consumers and producers. Given that stream-style-apps are just a series of consumers and producers linked together, there is good reason to believe this would offer idempotent processing.

<comment><USER7> Hi, thanks for the comments. My name is Vineet and I am a co-creator of this project along with Ask.

We do plan on adding support for Kafka exactly once semantics to Faust. As @dleclere pointed out, streaming apps are simply a topology of consumers and producers. We will be adding this as soon as the underlying kafka clients add support for exactly once semantics.

</comment></comment></comment><comment><USER8> "Faust" is a name-collision with another piece of software that does (audio) stream processing: [http://faust.grame.fr/](http://faust.grame.fr/).

<comment><USER9> It's also a name collision with a whole bunch of other things. Pretty soon we'll need some namespaces to help distinguish these things, or maybe just context.

<comment><USER10> > Pretty soon we'll need some namespaces to help distinguish these things, or > maybe just context

Quite the /faustian/ bargain you propose...

<comment><USER11> What is the tradeoff/downside to namespaces?

Other than their being cumbersome, but that is upfront, so I don't see the Faustian-ness there.

<comment><USER12> The better the comedic payoff, the flimsier the alignment with reality needs to be.

As a corollary though - the stronger the alignment with reality, the better the comedic payoff - all other things being equal.

</comment></comment></comment></comment></comment><comment><USER13> How does Faust work with Django? There's a mention on needing gevent or eventlet to bridge, but nothing about how you'd integrate the two.

I'm assuming the entrypoint would need a django.setup, and then you'd import the modules that had the Faust tasks? A how-to in the docs would be very useful.

I see in one of the other comments about acking due to an exception. This is one of the major issues with celery IMO (at least before version 4 before the new setting was added). I'd hope that exception acking would at least be configurable.

<comment><USER3> There's an examples/django project in the distribution. I think they removed the gevent bridge from PyPI for some reason, but you can still use the eventlet one. Gevent is production quality and the concept of bridging them is sound, so hope someone will work on it.

</comment></comment><comment><USER14> The docs link doesn't seem to be live yet:

[http://docs.fauststream.com/en/latest/introduction.html](http://docs.fauststream.com/en/latest/introduction.html)

One question I had is how Robinhood might be doing message passing and persistence. For example, I might have a stream, that creates more messages that needs to processed, and then eventually I would want to persist the "Table" to an actual datastore.

<comment><USER3> My name is Ask and I am one of the co-creators along with Vineet.

Thanks for pointing this out. Fixed the links. You can also find the docs here: [http://faust.readthedocs.io/en/latest/](http://faust.readthedocs.io/en/latest/)

Faust uses Kafka for message passing. The new messages you create can be pushed to a new topic and you could have another agent consuming from this new topic. Check out the word count example here: [https://github.com/robinhood/faust/blob/9fc9af9f213b75159a54...](https://github.com/robinhood/faust/blob/9fc9af9f213b75159a5413c831fe75eebebbbc51/examples/word_count.py)

Also note that the Table is persisted in a log compacted Kafka topic. This means, we are able to recover the state of the table in the case of a failure. However, you can always write to any other datastore while processing a stream within an agent. We do have some services that process streams and storing state in Redis and Postgres.

<comment><USER14> What I'm thinking of is flushing the table to a secondary storage so that other services can query that data.

I think Storm/Flink have the concept of a "tick tuple", a message that comes every n-seconds to tell the worker to flush the table to some other store. I've been looking over the project, and I'm not sure how I would do this in Faust yet, as far as I understand the "Table" is partitioned, so you'd have to send a tick to every worker.

Very interesting project!

<comment><USER3> Faust can serve the data over HTTP/websockets and other transports, so you can query it directly!

<comment><USER7> In addition to that you can have an arbitrary method run at an interval using the app.timer decorator. You can use this to flush every n seconds. You could also use stream.take to read batches of messages (or wait t seconds, whichever happens first) and write to an external source.

</comment></comment></comment></comment></comment><comment><USER15> How does compare with Celery, given the author of both libraries is the same?

Is it an apple and oranges comparison? When would one use this instead of Celery?

Found the following for those curious: [http://faust.readthedocs.io/en/latest/playbooks/vscelery.htm...](http://faust.readthedocs.io/en/latest/playbooks/vscelery.htmlt)

<comment><USER16> Typo in link, [http://faust.readthedocs.io/en/latest/playbooks/vscelery.htm...](http://faust.readthedocs.io/en/latest/playbooks/vscelery.html)

<comment><USER17> I guess the libraries ultimately serve different purposes but the Celery example is 100 times more approachable than the Faust example.

<comment><USER3> Yes, they do serve different purposes but they also share similarities. You could easily write a task queue on top of Faust.

It's important to remember that users had difficulty understanding the concepts behind Celery as well, perhaps it's more approachable now that you're used to it.

Using an asynchronous iterator for processing events enables us to maintain state. It's no longer just a callback that handles a single event, you could do things like "read 10 events at a time", or "wait for events on two separate topics and join them".

</comment></comment></comment></comment><comment><USER18> I was kinda wondering about the performance of a streaming lib written in Python, but from the README it looks like they support high-performance dependencies like uvloop, RocksDB and C extensions. And it's used in production at Robinhood. This could have been written in Go, but it was written in Python. Very interesting.

<comment><USER14> In my experience, if performance is an absolute need, there are plenty of other frameworks out there. Apache Flink and Apache Apex come to mind, even though they are JVM.

Whats interesting about the Python angle is I've noticed there are data science teams who would want to manage streams in production, however there tends to be a heavy dependency on python and its ecosystem (numpy, scipy, tensorflow).

</comment></comment><comment><USER19> Looks similar to the project my team uses for Kafka / Kinesis stream processing in Python / Django projects: [https://gitlab.com/thelabnyc/django- logpipe](https://gitlab.com/thelabnyc/django-logpipe)

</comment><comment><USER20> Docs seem to be down? [http://docs.fauststream.com/en/latest/playbooks/quickstart.h...](http://docs.fauststream.com/en/latest/playbooks/quickstart.html)

<comment><USER21> Seems to be working for me: [http://faust.readthedocs.io/en/latest/](http://faust.readthedocs.io/en/latest/)

<comment><USER22> The link is wrong... make a PR!

</comment></comment></comment><comment><USER23> Well, a bit off-topic but all this naming chaos has gone way too far. Kafka/Faust and so on and so on. I found it really disturbing the way we treat and abuse such meaningful heritage.

<comment><USER24> I wouldn't worry about it too much. The vast difference in contexts (literary circles, high school classrooms VS. HN comment pages, Slack chatrooms, developer podcasts) ensures there isn't any confusion. If anything, the choice of name speaks to the importance of its source.

</comment></comment><comment><USER25> > Tables are stored locally on each machine using a superfast embedded > database written in C++, called RocksDB.

I haven't used RocksDB. Does being a LevelDB fork give it similar corruption issues?

<comment><USER7> We have been using RocksDB for some time and it works fairly well. While we haven't seen any corruption yet, as you correctly pointed out, it is definitely a possibility.

We use RocksDB only as a cache and use log-compacted kafka topics as the source of truth. In the case of RocksDB corruption, we can simply delete the local rocksdb cache and the faust app should recover (and rebuild the rocksdb state) from the log compacted Kafka topic.

</comment></comment><comment><USER26> Faust looks really cool with its native Python implementation. How does this compared with Apache Beam or Google's Dataflow as they have recently rolled out their Python SDK?

<comment><USER3> Faust is a library that you can import into your Python program, and all it requires is Kafka. Most other stream processing systems require additional infrastructure. Kafka Streams has similar goals, but Faust additionally enables you to use Python libraries and perform async I/O operations while processing the stream.

</comment></comment><comment><USER22> Do you have any thoughts for creating Models from Avro schemas?

<comment><USER3> We had support for it initially, but we ended up not using the schema registry server. We want to add support for this back in if it provides value.

</comment></comment><comment><USER27> Is there something like this for node.js/typescript?

<comment><USER28> [https://nsq.io](https://nsq.io)

</comment></comment><comment><USER29> While the page does mention alternatives (Flink, Storm, Samza, Spark Streaming) it does not compare Faust to those alternatives. And it does not answer the most important question for a prospective user: why would I use this instead?

Ex ante Python seems like a poor choice for a large distributed system where network and CPU efficiency are important. Existing solutions have good performance, are easy to use, and thanks to broad adoption and community support, are very well maintained.

<comment><USER18> > why would I use this instead?

I can't speak for the developer, but a few things stood out to me:

1) It's Python. Which means there's no impedance mismatch in using numerical/data science libraries like Numpy and the like. For data engineers trying to productionize data science workloads, this is quite compelling -- no need to throw away all of the Python code written by data scientists. This also lowers the barrier to entry for streaming code.

2) I had the same reservations about CPU efficiency, but it looks like they're using best-of-class libraries (RocksDB is C++, uvloop is C/Cython, etc.). I was at a PyCon talk where the speaker demo'ed Dask (a distributed computation system similar to Spark) running on Kubernetes and it was very impressive. Scalability didn't seem to be an issue. Dask actually outperformed Spark in some instances.

I wonder if Kubernetes is the key to making these types of solutions competitive with traditional JVM type distributed applications like Spark Streaming, etc.

3) Not all streaming data is real-time. In fact, streaming just means unbounded data with no inherent stipulation of near real-time SLAs. Real-time is actually a much stricter requirement.

<comment><USER3> My name is Ask and I'm co-creator on this project, along with Vineet Goel.

This answer sums up why we wanted to use Python for this project: it's the most popular language for data science and people can learn it quickly.

Performance is not really a problem either, with Python 3 and asyncio we can process tens of thousands of events/s. I have seen 50k events/s, and there are still many optimizations that can be made.

That said, Faust is not just for data science. We use it to write backend services that serve WebSockets and HTTP from the same Faust worker instances that process the stream.</comment></comment></comment>


Festo Smartbird - <AUTHOR> http://www.youtube.com/watch?v=kA7PNQiHT1Q

<comment><AUTHOR> Here is a product page on the contraption: <http://www.festo.com/cms/en_corp/11369.htm>

And here is a shorter video of the bird in flight: <http://www.youtube.com/watch?v=nnR8fDW3Ilo></comment>


Ask HN: Who's hiring Jr Engineers - <AUTHOR>

I've been searching for a while so I decided I would reach out. Who out there is hiring junior developers/software engineers? <comment><USER2> [http://positions.bookbub.com/](http://positions.bookbub.com/)

Looking for developers excited to join a fast growing startup in Cambridge, MA.

</comment><comment><USER3> [https://nextdoor.com/jobs/](https://nextdoor.com/jobs/)

Alternatively you can email firstname.lastname@example.com

</comment><comment><USER4> Shoot me a resume. Email in profile.

[https://reschedulemed.com](https://reschedulemed.com)

</comment><comment><USER5> Datanyze in San Mateo is looking for developers of all skill levels. Email firstname.lastname@example.com for more information.

</comment><comment><USER6> Zenefits is looking for all levels of developers. Specifically on the front end.

firstname.lastname@example.com

</comment><comment><USER7> Where are you based? Can you include your email please?</comment>


Earth-Size, Habitable Zone Planet Found Hidden in Early NASA Kepler Data - <AUTHOR> https://exoplanets.nasa.gov/news/1637/earth-size-habitable-zone-planet-found-hidden-in-early-nasa-kepler-data/ <comment><USER2> I thought the nearest one, only 4 light years away, Proxima Centauri b is quite habitable, with water and such. Best and nearest. Easier for a trip than 300.</comment>


How to make Reddit less terrible - <AUTHOR> http://bbot.org/blog/archives/2011/07/01/how_to_make_reddit_suck_less/

<comment><USER2> I'm a designer and I hate the look the Reddit -- but frankly I think that's the point of the design! By looking ugly the site communicates "this is a geek zone, and some of us don't wear deodorant!" That branding really appeals to the audience they have captured from slick looking sites like Digg. Keep in mind Reddit is owned by Conde Nast and they have great taste and tons of talent to match -- so if the site is ugly there's a reason for it.

<comment><USER3> This article wasn't about the design?...

It was about the amount of imgur links and lolcats that get pushed to the front page and which subreddits to subscribe to to have a different reddit experience.

</comment></comment><comment><USER4> Why so serious?</comment>


Ask HN: You're building an app in 2016 – How would you let users login? - <AUTHOR> 1. Facebook Login (or other social logins)
2. Phone number with SMS code
3. Username/pass
4. Email/pass (Email will need to be verified)
Would like to hear people's opinions. Assuming the app doesn't absolutely need Facebook's social data, all the options seem viable with different pros/cons. <comment><USER2> I think we're back to email/pass as a preference. Because folks are so wary of apps requesting permission to their social accounts or people no longer using said social network. There's definitely social fatigue in the air.

</comment><comment><USER3> I would try to get away with the most minimal thing possible. Ideally I would do the same thing flash games have always done and create a cookie for the user.

If they need to login from a different place, I would put a simple 1 line form and button for emailing a link that would allow them to do that.

If it was necessary, I would give them the option to backup their account to an email address. This would just set the hash to something new so that the old cookie info no longer works, and they only have to click the reactivation email.

If this is an account where virtual goods are purchased (like Steam) and so there is actual value to the account, I would do email + phone backup. Phone backups aren't good enough on their own because people switch phone numbers. Emails aren't good enough on their own because people reuse login data all the time. This is the only case where I wouldn't store login data using cookies.

Forcing registrations and logins on the user really doesn't make sense 99% of the time.

</comment><comment><USER4> In 2016 there are different levels of logged in: L1 - I think I know who you are because you have a cookie or I remember your IP or browser fingerprint L2 - I definitely know who you are because you logged in during this session and have a cookie L3 - I trust you enough to show you your user info over https since I just asked you to log in and you gave a password or verified you with facebook.

Obviously some bigger names are experimenting and trust their tracking enough to do away with authentication for some things. Personally, I have an anonymous mode on one site. It is "I don't know who you are but I remember you." They can use the site and then convert to a real user with facebook, google, or email/password.

</comment><comment><USER5> I already have 1000 different accounts on 1000 different websites. I don't want yet another one. Can someone fix that?

Fuck emails. Fuck passwords. I don't want to deal with any of these things. What's the purposed of being logged-in anyways?

<comment><AUTHOR> This is an interesting thought. The point of logging in would be to save user state, but maybe users can opt-out of that for certain apps... hmm

<comment><USER5> There are better ways.

</comment></comment></comment><comment><USER6> I chose to do Facebook and email/password.

SMS costs a very tiny amount of money, and didn't offer any advantages (you can't get at the user's phone # on ios, so you cannot prefill, thus email had a similar level of friction from the user's perspective).

<comment><USER7> I've seen some of the large websites in India offer OTP (one time password) login using SMS, which I personally have used many times. You enter your mobile no, get an OTP and login with that. Removes the hassle of remembering the password.

</comment></comment><comment><USER8> 5\. Email a login link to the users verified email address. No need for a password.

<comment><USER9> This sounds like the least user-friendly option available and a real obstruction, especially if using the application on a mobile device.

Plus the whole thing becomes unsecure if users start forwarding the email to others without thinking of the implications.

<comment><USER10> > users start forwarding the email

What if the link is only good once? Problem solved.

</comment></comment></comment><comment><USER11> What will users get out of logging in?

Which is to say that the first options would be simply for the app to work without anyone having to log in. That's practical for some apps, and of course not for others. The larger point is that just as a login mechanism might not be necessary, if it is necessary the choice of mechanism should make sense given the nature of the app...don't use Twitter for a self-help app for narcissism or Instagram for a seniors lifestyle app.

As for the alternatives, what good could possibly come out of storing name/email and password pairs?

</comment><comment><USER12> I built a mobile web app, and I started out with just Facebook and Twitter login. However, I have some friends who are privacy conscious and they do not have social media. They would prefer to have a email/pass login option.

So that that is next on my list to add to this current project.

<comment><AUTHOR> Would you say that's a small percent of your user base? Most of my friends hate the idea of needing to login via Facebook, but it is truly the simplest for them - and I'm not sure if my friends are just disproportionately biased. I'm also not sure if I want to depend on a third party.

</comment></comment><comment><USER13> Really it depends on the app, but for the most part I like to give options for 1, 3, and 4. Social login is linked to an actual account that can be used for 3/4 if they want.

</comment><comment><USER14> People really like email/pass, the more lazy ones use facebook and other social. SMS costs money and I don't see the advantage of it.</comment>


Edward Snowden's Memoir Is Coming on Sept. 17th - <AUTHOR> https://www.nytimes.com/2019/08/01/books/edward-snowden-book.html <comment><USER2> On HN there's no harm in waiting until a thing exists.</comment>


Why Rating Rocks (but wordier) - <AUTHOR> https://medium.com/@DougMHW/full-spectrum-rating-and-the-preservation-of-information-5861e7ce474c#.5u80k5awm <comment><AUTHOR> I wrote this article some days ago which runs through all the major group decision making methods I've come across and hopefully conveys why zero-sum methods (like plurality) suck, why methods based on conversation or veto are vertically/horizontally challanged and why rated voting systems with consent orientation (assessing resistance first) may be the thread out of the labyrinth. Interested to hear any feedback. Cheers, D</comment>


You don't have what it takes - <AUTHOR> http://calacanis.com/2015/09/20/you-dont-have-what-it-takes/ <comment><USER2> "Right now, you're one of three people at a startup when you should be one of 200 people at a mid-sized company"

I think this assumes that people are basically static, with a bunch of fixed personality traits that define them for life. I don't think that's true.

And there's a whole lot of steps between 3-person startup and 200-person company. No need to jump to extremes.</comment>


An expert's case for nuclear power - <AUTHOR> https://www.vox.com/2020/2/28/21155995/jessica-lovering-nuclear-energy <comment><USER2> Nuclear energy is but a lame attempt to keep people dependant on governments & prevent them from generating their own power via solar/wind.</comment>


I built an app that programatically generates a 15s version of movie trailers - <AUTHOR> http://www.trailerpuppy.com/ <comment><USER2> Do you have a blog post where you explain the main ideas of the algorithm? Bonus points for many images and examples, probably one or two trailer->mini- trailer example in images/screenshots.</comment>


Scottish author Iain Banks dies aged 59 - <AUTHOR> http://www.scotsman.com/lifestyle/books/features/scottish-author-iain-banks-dies-aged-59-1-2960671 <comment><USER2> See: [https://news.ycombinator.com/item?id=5849186](https://news.ycombinator.com/item?id=5849186)

<comment><AUTHOR> Yes, just spotted that, thanks.

I'll leave this here, but for anyone reading this, the discussion is "over there".

</comment></comment><comment><USER3> I'm wondering though. He discovered that he had cancer in January, or February, and it was quite well developer.

Why didn't he notice it sooner? Why didn't he go for occasional checkups?

<comment><USER4> Cancer is very often completely asymptomatic until it's too late to do anything about it. We've recently developed blood tests that can detect, or maybe suggest the presence of _some_ cancers, but they're relatively new, and the other means of detecting it are typically only employed when there's a reason to suspect they're needed. I don't know what the NHS's technology adoption rate is, though, so I can't even begin to speculate on whether or not he could have availed himself of them, let alone whether they're applicable to the rare type of gallbladder cancer Banks had.

Either way, I am a very sad person today. I've just pre-ordered _Quarry_ , and I'm about to head downstairs to see which of his other books I've least recently read, and will probably start reading one of them again this afternoon.

Vaya con Dios, Iain. Thanks for everything.</comment></comment>


Ask HN: How much censorship is there here really? - <AUTHOR> So even if I have 231 karma points I decided to Show HN from a new account to confirm my suspicions mainly because of a recent article I read about moderation here.
I find it unreasonable that a new account's posts are [DEAD] immediately and I can only suspect that it has been hidden because it deals directly with a well known SV startup that copied the idea after my site was online.
Anybody has a similar experience? I hope this post stays a little bit online. <comment><USER2> (Just observations as a user that spends way to much time on HN and /new in particular)

> _I can only suspect that it has been hidden because it deals directly with a > well known SV startup that copied the idea after my site was online._

I think you vastly overestimate the amount of attention that's paid to new posts – it seems like you are suggesting someone saw your post, decided that it YC doesn't like it and shadowbanned you immediately? From what I've seen, that's not the case, moderation often has long delays.

With a new account, spam filtering of some kind seems way more likely. Which is difficult: there isn't much signal for new accounts, on the other hand, if you look at /new with showdead on (so you can see hidden posts), a lot of spam comes from new accounts, and nearly no spam comes from accounts that didn't start as spammers.

I don't know how the filter works, but possibly creating a new account when you already had one triggered the filter additionally? (assuming you did it in a way that the system could detect this)

I'm not a fan of all moderation decisions here (e.g. I don't like the policy of rate-limiting users vastly differently, and would like more transparency for the ranking), but I also think many people see conspiracy where I can't see any, and it's not the most obvious explaination.

</comment><comment><USER3> What did the mods say when you emailed them to ask about this?</comment>


Show HN: CropUp, Sell your _______ on _______ - <AUTHOR> http://cropup.com

<comment><USER2> For the box that shows a random service, I'd recommend just making it sequential. When it randomly comes back to a service I've seen before, I assume that I've seen all the services.

For example, I got: YouTube, Tumblr, YouTube, YouTube, Twitter

<comment><USER3> (I do product at CropUp.)

Yep, we noticed that as well, will fix it. Excellent observation, thank you.

<comment><USER4> I want to suggest that it moves a little bit faster too. Either that or have both fields change at the same time. I get that you're trying to say "you can sell anything on any platform" by having the item persist while showing a different platform, but I think the fast that they're different fields is enough of a hint that you can sell "anything on anything."

</comment></comment></comment><comment><USER5> Your design overall is really nice. Me thinks this is either becoming a crowded space or there's just a lot of people doing similar projects for fun because the payment part is much easier (I did <http://bngal.com> as a side project for example).

BIG QUESTION: why PayPal for disbursing funds? With Stripe and BalancedPayments as options, I'm not sure why you'd use PayPal (other than possibly international reach).

<comment><USER3> (I do product at CropUp.)

Good question. PayPal was the easiest to use, for now, and works well. We'll likely add additional payout options, but no concrete plans or timing just yet.

<comment><USER6> Paul, just sent you an email about Balanced Payouts (<https://www.balancedpayments.com/#payouts>)

Nice job with Cropup!

</comment></comment></comment><comment><USER7> You should consider modifying your pricing to be more in line with gumroad --- who appear to be your main competitor. They charge 5 percent of the purchase price plus a $0.25 flat fee.

<comment><USER3> (I do product at CroUp.)

We see shopping cart providers as our competition and they usually charge setup and/or monthly fees, which we do not. Given the value and functionalities our product provides we feel our pricing is fair, but we're open to structuring it differently in the future depending on market feedback, like volume or product price based, or we introduce a premium account with a monthly fee but lower per transaction fees.

<comment><USER8> I'm sure people who don't know about other direct competitors (Gumroad, etc) will see it as an alternative to a more elabore shopping cart or ecommerce site, and in that case 10% may be a no brainer. But if someone -like myself- knows about both alternatives, I may use CropUp initially but if I get some decent volume, I'd switch to Gumroad unless you guys had a 5% option for higher volume customers.

<comment><USER3> (I do product at CropUp.)

Fair point. We're open to exploring other pricing structures based on the market feedback we'll get. In general, goal is to rather be the Apple of eCommerce than the Dell. (Well, that sounds cheesy and not in a good way :) Sorry.) We don't want to be the cheapest service but the one that provides our sellers with the most value.

<comment><USER9> One interesting avenue for providing further value so that people might not balk at the 10% fee (as witnessed by a few skeptics in this thread), would be to perhaps provide next-day shipped shipping labels for merchants.

It seems that since the orders will be coming through CropUp, why not hold the hand of the merchant just a few steps further? Intake orders, print shipping labels, provide shipping materials to merchants, One-Stop-Shop concept.

<comment><USER3> (I do product at CropUp).

Excellent thinking! This is one of the ideas on our list, no concrete plans or timing yet though. It should just be real simple to sell the products you make so that you can spend more time on the things you actually care about like making some cool products.

</comment></comment></comment></comment></comment></comment><comment><USER8> Great work, love the design. One thing I'd like to see before I sign up, though, is a sample "product / purchase page". When I needed something like this I ran to Gumroad because I had used them before (as a customer) and loved the experience.

<comment><USER10> (I work at CropUp, I'm the designer there.)

Thanks! That's a great point and we're in the process of creating a few more product screenshots and possibly a video demo to cycle in that header area. In the mean time feel free to take a look at it here: <http://crop.to/fW>

<comment><USER11> I notice that my shirt size isn't included on the final confirmation page. Seems like it should be.

<comment><USER3> (I do product at CropUp.)

Outsch. We're fixing that as we speak. Our apologies.

</comment></comment></comment></comment><comment><USER12> Great looking product, I'm a big fan of empowering everyday people to make money doing what they love. ShopLocket is a (local) favourite of mine, and I think GumRoad is also in this category.

Are there specific use cases that CropUp provides more value? Eg. on physical products? Photography? Digital downloads?

I ask because I see more and more similar products cropping up (pardon the pun) which want to help anyone sell anything online, but can't help but think that focusing on a specific vertical may result in the platform providing more value to the sellers.

<comment><USER3> (I do product at CropUp.)

For now we're focused on physical products, which come with a couple of challenges sellers of digital products usually don't have to worry about, like taxes, fulfillment, returns/refunds, etc. Our goal is to provide a product that equips sellers with everything needed for selling online and to make it real simple, so that they can focus on making their products and don't have to worry about selling them.

<comment><USER13> Cool site! Just notice that in some jurisdictions sellers of digital products also have to worry about taxes, cancellations, refunds etc.

<comment><USER3> (I do product at CropUp.)

Interesting. Would you be able to provide me with a link to where I can read more about this, please? Would be very helpful. Thank you.

<comment><USER13> Regarding cancellation of goods bought over the internet, directive 97/7/EC applies in the European Union: [http://eur- lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:...](http://eur- lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:31997L0007:EN:HTML)

Directives are implemented differently in different EU countries and the countries also have the option to impose stricter rules.

In Denmark, consumers have the right to return digital goods such as e-books etc within 2 weeks (provided they haven't started using the product). I have no idea how it is in other EU countries but I would not be surprised if several other countries protect consumers that way.

Most Danish sellers of digital products state in their terms that the right of cancellation only applies until the file (e.g. an e-book) has been downloaded. I am not sure that would hold up in court.

As for VAT, in the European Union this is regulated by an EU directive on the common system of VAT: [http://eur- lex.europa.eu/LexUriServ/LexUriServ.do?uri=CONSLE...](http://eur- lex.europa.eu/LexUriServ/LexUriServ.do?uri=CONSLEG:2006L0112:20130101:EN:HTML) Article 58 and Annex II deal with electronic services (and goods). Also look at the temporary rules in article 357 and forward.

As for taxes, every country has it's own rules and you will probably also have to consult double taxation treaties.

These issues are very complicated. If your website sells in different countries you should probably consult with accountants from each country.

<comment><USER3> (I do product at CropUp.)

Thank you. This doesn't look like a lot of fun to read... Will suffer through this. Again, thank you very much. Very helpful, very appreciated.

</comment></comment></comment></comment></comment></comment><comment><USER14> Looks great. One thing I was looking for is a demo/test purchase. As a seller I want to know how it looks like to buy my product. In general, a sandbox with a bunch of test products and credit card numbers would make it a lot easier to adopt. Good luck.

<comment><USER3> (I do product at CropUp.)

You're right. We need to -- and will -- figure something out to better convey the buyers' end to end experience to people interested in using our service to sell their products.

</comment></comment><comment><USER15> I like it. But 10% seems a little high - I'd at least have reduced percentages for volume.

I'm not sure if you have (or intend) to support people with a lot of products, but I'd be interested to see how it works if you have 50 products vs. 500 vs. 5000. It would be nice to get group reporting (like every color of a T-shirt combined, all my mugs, etc. Ideally with tags instead of categories so you can cross-report).

<comment><USER3> (I do product at CropUp.)

We have some interesting ideas for what we can do with pricing in the future, like based on volume or product price or maybe we introduce a premium account that comes with a monthly fee, but lower fees per transaction. Still thinking about these.

For now we think 10% is a fair price given the value and the functionalities our product provides, e.g. calculating taxes based on the seller's nexus states and the buyer's shipping address. Also, the seller is only charged a fee in case of a successful order, but not e.g. in case of a refund, which is different from other services like e.g. PayPal. (And different means better here, we think.)

</comment></comment><comment><USER16> Cool! This is a pretty crowded space but your site looks great. My one criticism is that the pricing is pretty hidden. That's the first thing I look for before signing up for something like this. It's especially important in this case because the service is supposed to help users make money, so they will really want to know how much they can make. Don't be ashamed that you take a cut for providing an awesome service!

<comment><USER3> (I do product at CropUp.)

You're right, we need to make pricing more visible.

</comment></comment><comment><USER17> The start selling button seem to be displaying incorrectly on chrome. The color isn't filling the button and instead it takes the color of the background.

<comment><USER18> (I work at CropUp)

We can't reproduce that issue. Did you try to clear your cache?

If you're still having that issue, can you send me an email: email@example.com

</comment></comment><comment><USER19> The website looks great! When I opened it, for some reason, I instinctively looked for a short video explaining what the website does and how it works. Maybe that could be something you might want to consider? Also, I had to check the comments here in order to find a demo product page - I would recommend you add a demo product page link on the front page, so people can see how it looks like in practice.

<comment><USER10> (I work at CropUp, I'm the designer there.)

Thanks! I completely agree with you on getting a video for the homepage, and we're actually in the process of creating one (they just take some time), as well getting a product demo link up.

</comment></comment><comment><USER20> Ten percent is too high.

</comment><comment><USER21> US only. And it's quite hard to figure out. This is all I could find>

<http://cropup.com/help/merchant>

 _What about international buyers?

Yep, no problem. You can accept payments from international customers._

<comment><USER3> (I do product at CropUp.)

Hmm. I'm not following, can you please explain? It's not US only and that's what the FAQ says / is supposed to say.

<comment><USER22> I think OP is referring to the _merchant_ side of things being US only.

<comment><USER3> Ah, I see. Good point, we currently don't call that out anywhere prominently, but we should. Thanks for clarifying.

</comment></comment></comment></comment><comment><USER23> Excellent idea! Waiting for digital goods selling / purchase notification API.

But.. if you give money to sellers with PayPal, you're paying PayPal fee?

<comment><USER24> Hey I'm curious as to what you mean by a purchase notification API?

Would you imagine something like a pub/sub system or something that you would ping?

<comment><USER23> I mean something like PayPal IPN or another system which notifies my server about a purchase so I can send digital good to buyer e-mail for example.

<comment><USER3> (I do product at CropUp.)

For digital goods, we'd handle the fulfillment for you. Goal is to make it dead simple and to provide everything you'd need, so you don't have to use any other services or do any coding.

Still, a server to server notification would be a good thing to have, no concrete plans or timing yet though.

Thanks for your feedback.

</comment></comment></comment></comment><comment><USER25> Is this only for people who don't have a product order form yet, or is there a way for us to benefit from using you too?

<comment><USER3> (I do product at CropUp.)

It's for anyone who wants to sell a product on a social network like Facebook, Twitter, etc., whether you have an online store already or not. It's not great to share a link to your online store on social networks because then your customers have to go through the entire checkout flow incl. putting the item into the shopping cart, going to the shopping cart, clicking on checkout, creating an account or not, ... even though all they want to do is buy one specific item quickly and easily. With CropUp you can sell individual products via a very streamlined checkout flow, that works great regardless of the social network or the customer's device (mobile, tablet, desktop).

</comment></comment><comment><USER26> Nice idea, but I couldn't find a demo product or some place with current customers so I can check how it looks, etc

<comment><AUTHOR> Sure, try this product: <http://crop.to/fW>

</comment></comment><comment><USER27> I know you guys are overwhelmed with work by now, but I really want to know how was your experience with AngularJS.

<comment><AUTHOR> (I'm the tech lead at CropUp)

I'm surprised how well AngularJS has worked for us.

Currently, we're using it for the shopping checkout page and also for the merchant dashboard. The dashboard is all driven by AngularJS (using $resource/$http api calls). The checkout page is more like Twitter, in that we preload data in the DOM when it's rendered, but there are API calls via AngularJS to create the order, check quantity, etc. These pages are actually served directly from our CDN.

As far as how it's worked for us. We've actually rewritten our dashboard and checkout page twice, and it look some getting used to on how to structure our controllers. Getting used to writing directives instead of using jQuery and doing DOM manipulation in our controllers also takes some discipline, because it's just way simpler to drop some selectors and event bindings/triggers in your controller.

The way AngularJS encourages you to keep any dom manipulation out of the controller and to think about reusable directives has really helped for readability and maintainability of the code base. We're consistently surprised how quickly we can implement features because of AngularJS. We've actually said, "Wow, that was easier than I was expecting" quite a few times.

However, there are some hurdles. $http doesn't support file uploads, the stable release doesn't support custom http headers with $resource, only one ngView, etc. That said, I still would not hesitate to recommend AngularJS.

<comment><USER28> Did the limitation of having only one ng-view affect your project at all? I'm embarking on a new project using Angular and there are mixed opinions on the web. People that were shouting against it have come back saying that it's actually not so bad [1].

[1] [https://groups.google.com/forum/?fromgroups=#!topic/angular/...](https://groups.google.com/forum/?fromgroups=#!topic/angular/xIIyGpW8KUk)

<comment><AUTHOR> (Tech lead @ CropUp)

In the first iteration, we thought multiple ngViews would have been useful, but it didn't prevent us from achieving the design we wanted. You can use ngInclude to accomplish a similar effect, if you don't need the routing.

AngularUI seems to have a solution for nested views/routing here (<https://github.com/angular-ui/ui-router>). Although, I would think about your routes and the pieces of your web application and rethink whether you really need ngView. Using ngIncludes for pieces you want to reuse might make more sense.

edit: for clarity

<comment><USER28> It sure makes more sense, but you need to write boilerplate code to map URL state to ng-include changes/updates. It would be nice if it was out of the box.

<comment><AUTHOR> I don't know the details of your app but maybe you should consider using ngView in the outer most container, then everything inside the container can pick the appropriate template via ngInclude. That's the path we took in our first iteration, this current iteration actually doesn't need nested/multiple ngViews.

</comment></comment></comment></comment></comment></comment><comment><USER29> Really cool idea and site. How do you guys differ from CashieCommerce.com ?

<comment><USER3> (I do product at CropUp.)

I'm not familiar with them, but I'll check them out now. Have you used them? Do you like them?

<comment><USER29> Yeah - I know the guys building it - I definitely like their product and take on the market. It seems like it must be a crowded space, just saw this come up on HN: <https://trychec.com>

</comment></comment></comment><comment><USER30> I think 10% will create a rather large barrier to entry for most.

</comment><comment><USER31> What provider do you use for processing the credit card payments?

<comment><USER3> (I do product at CropUp.)

Based on the other comments here you can tell we use neither Stripe nor Balanced :) One of the other big guys... Please email me if you'd like to discuss details: firstname.lastname@example.com</comment></comment>


1Bitsy and Black Magic Probe – Plug&Play GDB JTAG/SWD Debugger and ARM Dev Board - <AUTHOR> https://www.kickstarter.com/projects/esden/1bitsy-and-black-magic-probe-demystifying-arm-prog <comment><USER2> I first came across the Black Magic Probe (BMP) when starting doing ARM Cortex-M bare metal development. Since that time I've used a number of solutions from OpenOCD (opensource) to Segger J-Link (proprietary) to various incarnations of ST Micros ST-Link. There really isn't anything easier than telling gdb to attach to a serial port and go.</comment>


Show HN: WaspDB, a NoSQL database for Android - <AUTHOR>

http://code.google.com/p/waspdb/
It supports AES256 encryption for all the disk storage, Keys and Values are Java Objects (usually POJOs).
I would be happy to receive comments, suggestions or  anything else!
aw4y <comment><USER2> Great! There is a need of similar solutions. However, a few comments.

The encryption is interesting but most developers will not care whether it is there or not. So if you don't need it yourself, don't spent too much time on it in future development. That is just an advice.

Second your database creation, is not simple enough.

WaspFactory.createDatabase("/sdcard/","myDatabase")

is simple, but why not having

WaspFactory.createDatabase("myDatabase")

and store the database at some default place (the private folder of the app for example?)

or even

WaspFactory.createDatabase()

and store the database at default place with a default name.

One last thing. Your store seems great to replace the default android preferences, because it can store complex data in a simple way. Keep the good work.

<comment><AUTHOR> Thanks!

I agree with encryption features, so I created a different branch (dev-noaes) without encryption - and of course without the bouncycastle dependence, in this way the complete library to include is really small!

I will add soon the new methods for database creation, it's a good idea!

best, aw4y</comment></comment>


Building angularjs web using es6, with gulp,  babel,  jspm - <AUTHOR> http://engineering.iconnect360.com/angularjs/

<comment><AUTHOR> feel free to leave any comments after reading</comment>


The Google 'vs' Trick: How ego graphs can help you learn about AI - <AUTHOR> https://medium.com/applied-data-science/the-google-vs-trick-618c8fd5359f <comment><USER2> [https://news.ycombinator.com/item?id=23599177](https://news.ycombinator.com/item?id=23599177)</comment>


Julia Box – Run Julia from the Browser. No Setup. Donated by Google Cloud - <AUTHOR> https://www.juliabox.com <comment><USER2> If there's no setup then why do I have to authenticate?

<comment><USER3> There's a click-through Terms of Service license you have to agree to.

</comment></comment><comment><USER4> There should be demo instance or at least screenshots what to expect before signing in.</comment>


Ask HN: What tools do you use to give automated tours of your product? - <AUTHOR>

We want to create an easy step-by-step guided tour of how to use our product.  We've considered making a basic video, but also want to dive a little bit deeper for other folks that need more hand holding.
Has anyone used this tool to help them: http://touration.com/
What other tools are out there that you have used?  Thanks! <comment><USER2> I'll go with the simple video version, because anything else just seems to fancy for me.

It depends on your customer: If you have customers who are not that tech-savvy you might consider touration.com, otherwise stick with the basic video and you'll be fine.</comment>


The Law of Demeter for Ruby on Rails - <AUTHOR> http://www.codebeerstartups.com/2013/05/the-law-of-demeter-for-ruby-on-rails/

<comment><USER2> I suspect that the bigger code smell there is a property called "user" on an object called "invoice"; while their may well be a table of users which is referenced from the invoice, the role of the user with regard to the invoice is probably (guessing from the attributes that are being referenced) something like "customer" (or some specific line-of-business equivalent, like "tenant".)

Code that doesn't say what it means is a bigger maintainability problem that code that "sees" objects a step farther out than is ideal.</comment>


Why the Razr isn't a Motorola-Google wonderphone - <AUTHOR> http://www.extremetech.com/computing/104027-why-the-motorola-droid-razr-will-get-left-in-the-dust

<comment><USER3> Custom skins layered on top of vanilla Android are such an antipattern it hurts.

It sucks for device manufacturers because it is costly to build.

It sucks for consumers because the manufacturers have an incentive to drop support for any device sold asap WRT software updates.

It sucks for developers because custom components are not standard across devices.

The only point in favour of custom skins is that it theoretically allows manufacturers to differentiate and as a result offers more choice to end users.

In reality though, I suspect very few end users to pick their Android based on the custom skin it comes with, and I'm sure many would be pissed if they realized that custom skin is the reason for them not getting free ota upgrades to something they gave a nice chunk of cash for.

<comment><USER4> In a functional open-source ecosystem third parties would be pushing their innovations and enhancements back upstream for the benefit of everyone. Instead it's just a bunch of downstream, second-rate UI hacks that are different just for the sake of being different.

I think it's crucial that the mobile OS ecosystem is not dominated by any single player, but I find myself in the extremely unexpected and awkward position of rooting for Windows Phone.

<comment><USER5> I basically feel the same way, but I used WP7 at SxSW this year and it was a very disappointing experience. Even the apps that they were demoing to show how great WP7 is crashed with ugly "NullReferenceException" dialog boxes. (Crashing is one thing, but it's no help to the user to barf up a stack trace, however beautifully that stack trace may be formatted.) The Zagat app was one of the ones they were flogging, and it was pretty much unusable.

<comment><USER6> OK yes the handling of that error message is terrible in that special way that only Microsoft can be terrible at handling error messages. . .

But apps crashing with NullReferenceExceptions? WTF!? Sounds like Microsoft needs to start a program where each major app developer gets a personal visit from a Microsoft representative armed with a free copy of ReSharper and a long, baleful stare.

</comment></comment></comment></comment><comment><USER7> On top of all this, the hyper-masculine Droid branding/styling is out of step with the market and even with where Google is going with ICS - <USER2> manliness is about as gauche as the mostly abandoned tactic of marketing gadgets specifically for women. It was at least _some_ kind of hook in the days when the Droid had little competition, but next to a modern Samsung, it looks outdated.

<comment><USER8> It was the right move for the first Droid phone, but I agree that the time has passed.

</comment></comment><comment><USER9> Amen to this article. I know all to well as a former Motorola Cliq customer how badly Motoblur makes your phone feel like the neglected stepchild of the Android ecosystem.

It launched with a heavily modified 1.5 version of Android (with a bunch of 1.6 functionality backported). This was at a time when Android 2.1 had been out for a while (edit: mid-November 2009). I remember asking the T-Mobile saleperson if there were plans to get 2.1 on the phone. He assured me he knew people beta testing it for release probably next quarter.

14 months later Moto released a buggy-as-all-heck version of 2.1 for the Cliq. Never followed up with a bug release that fixed all the instabilities of the phone.

Sadly the Cyanogenmod community started to care about the Cliq only a few months before I bought a Galaxy S2.

I just can't trust Moto to keep up at all. Fool me once and all...

</comment><comment><USER10> There is nothing insightful in this article. The same comments are repeated ad nauseaum in the Android fan sights' article comments.

If you ran up to someone in a Verizon store and tried to convince them not to buy the Razr because it won't have ICS until February, they would laugh in your face.

</comment><comment><USER11> Who thought this was going to be? The purchase hasn't gone through, and even then, best estimates for any sort of closer working relationship was very late 2012 or 2013. Besides, locked bootloader, Blur? There was never any doubt that this was another typical Moto/HTC release. I bet it won't see ICS for a few months too.</comment>


300,000 Kindle 2s Sold To Date - <AUTHOR> http://www.techcrunch.com/2009/04/16/300000-kindle-2s-sold-to-date/

<comment><USER2> Why is this selling so much better than the first gen product?

There wasn't any killer feature added, just refinements of existing features (I'm not bothering to upgrade my 1st gen kindle), nothing which would compel an audience beyond the gadget fiends.

Don't tell me e-readers have started reaching a mainstream audience...

<comment><USER3> I think the fact that Amazon released a second version let fence-sitters know that they were serious about the Kindle as a product. Having the feeling that a product might not be around in 2 or 3 years time causes people a lot of pause.</comment></comment>


Show HN: Protect Your Wealth with Kubera - <AUTHOR> https://kubera.com <comment><USER2> Looks pretty awesome. I am a fan of the Personal Capital product, but am not their customer due to a really poor experience with trying out their paid/banking services.

I'm curious what makes you guys different from Personal Capital?

</comment><comment><AUTHOR> Kubera founder (and huge HN fan) here. Please feel free to ask any questions.

<comment><USER3> In this era of privacy, why would I list such important information with you? I see your track record, but I'm fairly certain this data you store (however encrypted) and ask users to enter or connect to your systems sits somewhere closer to medical PII in value than a massive trove of mail from a smaller operator in the space.

This seems like you're building an extremely high value target on the back of successes of handling data of a lower value tier no matter how wonderful everything is, and success only grows the bounty. I don't need to hear that it won't happen, I need to see how I'm already protected should the worst come to pass. If all you can offer is best practices and no disaster plan that makes me better off than whole, I can only give you my best wishes for your future instead of a $10/month place at my table.</comment></comment>


Show HN: My notes on Working with Go - <AUTHOR> https://github.com/betty200744/ultimate-go <comment><USER2> Warning: opinions inbound

I clicked one part (enums) and noticed a pretty glaring issue. The way you are doing enums is really _not_ conventional Go code and probably not something I would allow past a PR review. I'm saying this as someone who has built many production systems with Go and taught it to many devs coming from Java.

This guide is more in-line with how Go enums should be designed: [https://blog.learngoprogramming.com/golang-const-type- enums-...](https://blog.learngoprogramming.com/golang-const-type-enums-iota- bc4befd096d3)

So, while I dig a little further, I think it's fair to warn people to take this with a grain of salt. Use the language yourself and come to your own conclusions as OP did.

<comment><USER3> I use this pattern without iota; tending towards constants as strings. This allows it to "serialize" to strings nicely instead of exposing useless (without context) integers

Do you have any thoughts on iota vs strings?

<comment><USER2> I typically use strings for enum values as well.

</comment></comment></comment><comment><USER4> I really enjoyed using Go in my Distributed Systems course in college, and I've enjoyed using it as a replacement for Python for little scripts I've written since the typed aspect of it makes it easier for me to go back and read what I've done. But, I have not enjoyed the Go micro service we use at work. We went with Go thinking the coroutine thread implementation would significantly improve performance over a Java microservice, but the service turned out to be GC limited. And the overall lack of support for most language features has made this codebase much larger than it needed to be.

I wish I could convince my team to try Rust for our next service

<comment><USER5> > but the service turned out to be GC limited

Go indeed has a lousy GC (compared to the JVM, at least.) This is why, in most production Go codebases I've seen, there's heavy reliance on [https://golang.org/src/sync/pool.go](https://golang.org/src/sync/pool.go) (or a NIH knocked-together version of it, if the author doesn't realize sync/pool exists.)

Try just switching a few of your most-oft-called constructors to allocate from a pool. It's pretty much the lowest-hanging fruit for Go performance gains.

<comment><USER4> Right, but if we go with Rust we won't have to worry about GC issues

</comment></comment></comment><comment><USER6> I checked out the example code for arrays ([https://github.com/betty200744/ultimate- go/blob/3de8a053d9f7...](https://github.com/betty200744/ultimate- go/blob/3de8a053d9f70523af709b4f320f18a5bd0b0c2e/Language_Specification/reference- type/array/arrays.go)) and noticed that OP seems to misunderstand a few things about Go arrays:

\- the cheat sheet differentiates between 'declaring' and 'declaring and initializing', but in Go there are no uninitialized arrays (or slices) \- a lot of times in this file, a slice is created instead of an array (lines 18, 21, 25, 31) \- arrays in Go don't really have a capacity (it's always the same as the array's length) \- the built-ins append and copy as well as the sort functions don't accept arrays (I assume this is why slices are created?)

<comment><USER7> > in Go there are no uninitialized arrays (or slices)

This is a little murky and misleading. In Go, you can actually save memory by 'declaring' only. For example, if you do var x []string, and never use x, it never actually uses memory. Whereas x := []string{} does. The JSON encoder treats the two differently, as well.

<comment><USER8> Much like the github link, you're confusing slices with arrays. Slices can be nil (data=nil, len=cap=0) or non-nil (data points somewhere, len and cap are what they are), but arrays are just arrays, there's no such thing as an uninitialized [3]byte.

<comment><USER7> I'm not. I've been a Go programmer for years, and I literally quoted your comment above mine - it says (or slices)

<comment><USER9> I believe your comment is wrong though. Those two things will use exactly the same amount of memory.

The data pointer in the slice points to an array-type of size zero. All allocations for objects of size zero return a fixed address in the data section (so there is a distinction between a nil and non-nil object, but a pointer to a zero sized object does not actually take any space).

See line 909: [https://golang.org/src/runtime/malloc.go](https://golang.org/src/runtime/malloc.go)

<comment><USER7> Flip the first line between true and false, you'll see different memory usage based on declaration type. I haven't analyzed the compiler code, but my assumption is it's forced to return an actual slice object when one is declared with :=. But I'd be happy to be better educated here -

[https://play.golang.org/p/wVyv0qhj9rp](https://play.golang.org/p/wVyv0qhj9rp)

<comment><USER8> []int{} is a non-nil slice, which allocates. The zero-length optimization probably doesn't exist for arrays in this context, because no sane code does this.

This still has nothing to do with "declaring" vs "initializing" (Go makes no such distinction; all values are always "initialized"), or direct use of arrays.

<comment><USER9> > The zero-length optimization probably doesn't exist for arrays in this > context

This is no distinction for arrays for non-array. E.g. [0]int is a valid type, and it's size is zero. It is treated exactly the same as all other zero-sized types. This is not a special optimization: there are may cases of zero-sized types.

The slice itself is a _value_ type. So foo := []int{} would occupy 24-bytes (data pointer, len, cap) and not necessarily escape to the heap, exactly the same as var foo []string.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> Thank you. I am just beginning to learn Go. This will be very useful to me.

If anyone knows similar notes for Python & C#, please reply.

<comment><USER11> What make you keep learning Go once you've tasted C# delights?

<comment><USER12> I started with Java, C#, and Python and one thing I really appreciated about Go was the simplicity. I like how many features it strips from C#. Some people take the tack that a language that is the union of all features is the best possible language on the grounds that one can choose their own feature set, but this is pretty obviously fallacious when you consider that you need to collaborate with others, use 3rd party libraries, etc. I also like the fact that it compiles to a single static binary by default.

Don't get me wrong, I think C# and .Net in general are pretty cool pieces of technology, but I never find myself reaching for them because I'm very often confident that I can get the job done more quickly with Go.

<comment><USER11> Just don't use the features you haven't yet learn. In a few years of experience you will reach a plateau of productivity in go that you'll only be able to beat by migrating toward a more featureful/better thought language

<comment><USER12> Like I said, I came to Go from C#, and my experience has been such that I'm generally more productive in Go. Further, I already addressed the fallacy that you can just avoid certain features.

<comment><USER13> Vast majority of my experience is Java, but I'm in a C# role right now. I have to agree with you, having only used Go tangentially -- the tooling is more approachable and bootstrapping a project is more straightforward. I can go ;) from zero to _something_ in a much shorter time

<comment><USER12> This is what drew me to Go circa 2012, and I've been pleased to find that Go's value proposition doesn't end after a short period of time but continues to pay dividends for individual developers and for the project as a whole over the long term.

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> good stuff, there is another really good GO online book: Go 101,[https://go101.org/](https://go101.org/) a lot of details, has been really helpful for me to advance in Go

</comment><comment><USER15> Thanks for the work. It's quite some materials to compile. I love how you organize your thoughts and knowledge together and I've just started doing that too.

</comment><comment><USER16> Is if err != nil supposed to become if err.Type.something != thatType?

</comment><comment><USER17> It's just code with comments what code is doing. Can we call them notes?

<comment><USER18> Go is very readable. It seems I can understand what he's doing / means, even with Chinese comments!

<comment><USER19> My first click was the link for "Accessing a value of an unexported identifier". Figured I'd see some reflection trick or similar. In looking at that code I still have no idea what it's doing in relation to accessing an unexported identifier.

So I went to the next link down, "Unexported fields from an exported struct". Figured this would be the clever way to access the "message" field. But again I don't get it. It seems it's the same code as the last example.

This either says something about my ability to understand Go code or that maybe a bit more exposition would be useful for at least some of the examples.

<comment><USER18> For that, you will need to know a bit about Go. The full totorial is here [https://www.ardanlabs.com/blog/2014/03/exportedunexported- id...](https://www.ardanlabs.com/blog/2014/03/exportedunexported-identifiers- in-go.html)

So in the end there's really no trick, you still can't access them directly.

</comment></comment></comment></comment><comment><USER20> Please have commit messages more informative than "update $filename"

<comment><USER2> Please try to contribute something actually relevant to the post.</comment></comment>


Survival of the Fittest Has Evolved: Try Survival of the Kindest - <AUTHOR> http://www.nbcnews.com/better/relationships/survival-fittest-has-evolved-try-survival-kindest-n730196 <comment><USER2> Kindness is fitness. Depending on who you're being kind to.</comment>


Ask HN: What do you hate about JavaScript? - <AUTHOR> <comment><USER2> That I need a ton of libs, frameworks and tools to create a todo app.

<comment> ix-hispana You don't. The todo app is a handy example because you have the CRUD operations and local state. It's meant to show you how to get to grips with a library so you can use it for a real project. The todo app itself is just an example.

</comment></comment><comment><USER3> The lack of type safety

<comment><AUTHOR> Good point. Something that annoys me quite alot tbh.</comment></comment>