PostgreSQL indexing in Rails - <AUTHOR> http://rny.io/rails/postgresql/2013/08/20/postgresql-indexing-in-rails.html

<comment><USER2> This is an incredibly suboptimal approach.

Postgresql (and even Mysql for that matter) lets you explicitly declare foreign key references when you create/alter a table and then the database will enforce integrity of those references for you. Which is great because when someone writes some kind of code outside of Rails to work with your db, and that code has bugs, and those bugs impact data integrity, there is a hard stop at the DB layer preventing dangling/invalid references that will blow something up later.

A side effect of creating these explicit foreign key relationships is that any needed indices are created on both sides of the key. [UPDATE: Nope, I'm wrong, see below.]

Here the author has a Rails setup that fails to declare foreign key constraints when it's making a table with relations. You can see this in the DB description of the `products` table which references the `categories` tables via a plain int called `category_id`. As a result of not having an explicit foreign key constraint this table also has no index on `category_id`.

So given a table with poor data integrity at the SQL/db level and lacking an index as a sympton of this problem, the author treats the symptom and advises the creation of an index on `category_id`, leaving the real problem woefully intact. And that real problem, to be clear, is the fact that the database is not being used properly but rather treated as a relatively dumb place to dump columnar data; things that Postgres gives you for free are set aside and pseudo-duplicated in Rails code.

Now I'm not blasting the author because I don't know if this is a tactical issue or an issue with Rails itself. Does Rails not allow foreign key constrains in the migrations?

Whether this is a flaw in Rails or how it's being used, this is a bad solution to the problem. The RDBMS is your friend, use it. (And if you're not going to use the integrity constraints of the DB why are you using Postgres instead of say BerkeleyDB or a loosely configured MySQL or Mongo or whatever?)

<comment><USER3> Rails migrations do not support creating foreign keys in the database, but you can do it with this library: [https://github.com/matthuhiggins/foreigner](https://github.com/matthuhiggins/foreigner)

<comment><USER4> Anyone know why ActiveRecord doesn't just include this functionality already? Or does anyone have any idea if it's planned to add?

<comment><USER5> I was searching for the same thing myself recently, and it seems that DHH is against having any sort of logic in the database - he believes that all validations and constraints should be in the application instead of being in both (which I believe is the correct way).

<comment><USER6> The problem is that sometimes you simply can't do it properly in application. Uniqueness is the most obvious example, although not the only one.

<comment><USER5> I probably phrased that incorrectly. I definitely think that you should have validation logic at the database level. I've had a couple of major issues in the past (while still learning web dev) where lack of indexes/constraints has pretty much ruined my database when I tried use them in production

</comment></comment></comment></comment></comment></comment><comment><USER7> So ... this might sound like a really dumb question but I come from a less- than-illustrious MySQL background and have built up "rules of thumb" over the years - especially around master-slave replication and security. Do note that I'm not specialized in devops, but just doing something good enough at a startup stage - for a database it means that downtime is acceptable in exchange for data safety.

I'm really, really unsure about how to use postgres in such a way: most posts that I read are around these really complex setups with zero downtime or these Postgresql-quickstart guides (which I'm not looking for) or Heroku howtos.

Does anyone have a non-devops set of Postgres best practices that could be used to get your transactional MVP up and running on Softlayer ?

<comment><USER8> I don't know Softlayer too well, but Postgres is better every day.

1\. Install Postgres 9.3, the version after the replication fix.

2\. Tune Postgres until it reaches a reasonable speed (lots of tutorials available, primarily just assigning it more RAM)

3\. Create a second instance, do a backup, restore backup on second instance

4\. Turn on streaming replication, ensure WALs are being received by second instance

5\. If you're paranoid, use synchronous replication, which won't finish a transaction until it's been committed on the primary and a streaming secondary.

I'm not our DBA, but I believe this covers the primary setup. You will have to test whether Postgres correctly moves into a new history chain on migration as support for this via WALSender is pretty new I believe.

<comment><USER9> I am our DBA, and, though brief, this is a reasonable list.

A caveat, though: be careful with synchronous replication; it actually _increases_ your chances of having an outage. If your slave goes down with sync rep, the master will no longer accept writes. (To mitigate that risk, have multiple slaves. But that can further increase the latency sync rep introduces, as now the master has to wait for _all_ the slaves to report back a successful write.)

<comment><USER8> Good point, I believe if you list multiple sync rep targets it only requires one of them, but I would have to go check that properly :)

Still, Postgres in a hot standby configuration is relatively simple, still high performance and an actual real database that doesn't need tens of grand in licensing. You really can't go much wrong with it.

<comment><USER7> thanks! just to be clear, you do mean host standby with streaming replication right ? And why did you specifically recommend 9.3 - I cant google for anything specific to standby fixes.

The authentication defaults for postgres and mysql are vastly different - I am always tempted to move all authentication to md5 (pretty much the same as mysql). Am I doing it wrong ?

<comment><USER9> You want either 9.3.2 or 9.2 >= 9.2.5. Before either of those, there was a bug in the streaming replication code such that, on failover, the last few outstanding transactions on the master might not be replayed on the slave, resulting in data loss.

And, no, you aren't doing it wrong. You generally want to use MD5 auth.

<comment><USER8> The reason I recommend 9.3 specifically is that when a migration occurs, Postgres switches to a new historical branch. As of 9.2 this change gets written only to the WAL directory, and you must use something like Ceph / Gluster in order to have these migration files available to each replicating server.

In 9.3 at some point this is slated for inclusion in the WALSender. This allows you to do full streaming replication without the requirement for a cluster filesystem to hold your binary logs.

<comment><USER7> but this is bleeding edge stuff ( never mind that it will work perfectly given past experience).

What did hackers (not whole development + ops) teams do before 9.3.2 ? with all due respect, is this the reason why startups still default to mysql over postgres ?

<comment><USER8> Postgres historically has been tricky to configure with 'proper' replication. This is partially because replication is not a remotely simple problem to fix as it appears. The reason people still default to mysql is simply because it occupies more mindshare and is marginally easier to set up. I still don't think it even allows such things as DDL rollbacks so it's hard to talk about it next to Postgres when you're talking about safety.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> I tried adding a partial index the other day but Rails didn't seem to particularly like it. Are the examples here from Rails 4? (I'm on 3.2.16).

The issue I had was that, while the partial index syntax worked and actually did create it, it wasn't reflected anywhere in the generated schema. So I was worried that future developers wouldn't realize there was a partial index (we use schema.rb as the canonical reference of DB state), and if we ever get rid of migrations by condensing them into one big one we might miss that there should be a partial index on the column.

And changing the config to generate schema.sql instead of schema.rb didn't help. It's broken with the latest version of postgresql...

<comment><AUTHOR> The article covers only Rails 4.

<comment><USER10> Ah, bummer. Anyone have any luck getting partial indexes to work in Rails 3.2?

<comment><USER11> You can always execute arbitrary SQL in migrations. For instance:

        def up
          execute('ALTER TABLE people ADD INDEX ...')
        end

The one thing to keep in mind though is that if you use ruby schema format, your tests won't pick up those execute statements. In that case it's best to either use the sql format or re-run migrations in the test environment to set up the test db.

</comment></comment></comment></comment><comment><USER12> Interesting, I was just puzzling over a postgresql indexing question myself. The generated migration to create one of my tables automatically generated indexes on the foreign keys. However, after further considering my model, I want to make the index on one of these foreign keys unique. Is there any way for a migration to alter the index, or do I just have to delete the old index and create a new one? Based on what I've seen so far, it looks like I have to delete and recreate, but I wouldn't mind confirming that.

<comment><USER13> You mean on the from side? Yes, just drop the existing index and create a unique index. You can do that within the same transaction.

Postgres already requires the pointed to relation to have a unique index:

        => create table foo (id int); -- No unique index here.
        CREATE TABLE
        => create index foo_id on foo(id);
        CREATE INDEX
        => create table bar(foo int references foo(id));
        ERROR:  there is no unique constraint matching given keys for referenced table "foo"

</comment></comment><comment><USER14> Question about pg/rails approach...

This seems to tie the database closely to the ORM. What if there are multiple applications using the schema? Wouldn't it be better to have the database code & controlling system separate?

I've found it more convenient to have a set of SQL files for specifying tables & indexes and to have the app not control the database schema directly (Perhaps I just don't see the clear advantage, or perhaps Rails tooling is so good it obviates my concerns. :-) ).

<comment><USER15> Rails makes it easier to do migrations and roll them back if necessary but you can dump the SQL from Postgres easily and you can choose whether Rails stores the schema in SQL or in its own format. I use SQL as at least in 3.2 Rails' own format didn't support all the features of Postgres (partial indexes etc.)

When doing a new deploy you shouldn't usually go through the migrations but just load the schema.

</comment></comment><comment><USER16> Ok, obviously I never done web development, but why you would want declare schema from rails? And ActiveRecord is some kind of ORM (the buzzword I was hearing lately, but never actually care to fully understand it)?

Now I am reading book High Performance MySQL: Optimization, Backups, and Replication (yes, I know this post about PostgreSQL) and there are so much stuff to know, so this ORM thing seems like a toy.

So what is wrong to creating schema with plain old (database specific) SQL?

<comment><USER17> Rails creates the database tables for whatever ORM you're using using its Migrations. Rails keeps track of which migration files have been run.

The usual syntax for creating these migration files is in Ruby, as this makes them database-independent, arguably more easily readable, and in newer versions of Rails, reversible.

Of course, you can put plain old SQL in these migrations if you want to as well.

</comment></comment><comment><USER18> You can also create indexes concurrently, using `algorithm: :concurrently` when creating the index[1]. You can't create concurrent indexes within a transaction, so be sure to call `disable_ddl_transaction!` in your migration definition.

[1]: [https://github.com/rails/rails/commit/2d33796457b139a58539c8...](https://github.com/rails/rails/commit/2d33796457b139a58539c890624591c97354d334)

</comment><comment><USER19> Postgresql advice from a mysql user. Foreign keys don't need indexes on the from side, and they should be pointing to a primary key on the to side so that is already covered. In mysql you likely want an index on the from side because you are probably joining on it and mysql only knows how to do nested loop joins. But postgresql is a real database, so we have hash joins and merge joins, which don't need indexes on the join conditions, rather on the where clause (like you would want anyways). [http://use-the-index- luke.com/sql/join/hash-join-partial-obj...](http://use-the-index- luke.com/sql/join/hash-join-partial-objects)

<comment><USER20> In the case that you use your database for more than just a persistence backend to your Rails app (blasphemy, I know, but odds are your Rails app is generating transactional data that's worthy of analysis you need real SQL for and not just ActiveRecord), indexing foreign keys is still worthwhile because sometimes you'll join the same foreign key in two different tables without ever needing to join in the table they normally map to.

<comment><USER19> What you describe doesn't need an index on the foreign key, that's the point I was making.

<comment><USER20> If you designate it as a foreign key in the schema it'll just use the PK index even if you don't join that table in at all? Wait, how does that even work? Does the PK index include the foreign key rows then? That's an awesome feature.</comment></comment></comment></comment>


Choosing Your First Marketing Hire - <AUTHOR> https://www.gkogan.co/blog/first-marketing-hire/ <comment><USER2> Interesting post with some really useful insights.

My comment isn't about the linked article per se, but I noticed recently (having made several first marketing hires myself) that it's really important to:

1) Have a very good 'head of marketing level' friend help you make your hiring decision

2)Be loose with titles - if you call the new hire your CMO/HoM and then realise later that they aren't up to that job, it's hard to hire above them without causing problems (leading a team is a very different skillset to setting up the first marketing channels, and not everyone who is good at the latter transitions well to the former).

Lastly, a tip for marketers looking to transition into working at a startup with a smallish marketing team (2-5 marketing hires) --> If they are advertising for a 'growth hacker' (with quite a generic skill set), then run for the hills and don't apply. Nine times out of ten, they realised too late that their CMO doesn't have the experience/skill to get the job done but, because they don't want to hire above them, they look for a 'growth hacker' to be CMO in responsibility but not pay or title (or decision making capacity).

<comment><USER3> I don't understand how anyone can call themselves a 'growth hacker', you might as well advertise you're a golden unicorn at the same time

<comment><USER4> I believe @louisswiss was discussing the company advertising to hire a growth hacker, rather than the marketer/developer advertising themselves as one.

Having been on the receiving end of such a company once (and having unfortunately accepted the job), I strongly concur with the sentiment laid out: never, ever, ever accept a marketing job offer where the yardstick is delivering the moon and more every Friday like clockwork.

Marketing is, first and foremost, a systematic activity. You get a small gain here and a small gain there, week after week, with systematic testing in between. Your bread and butter is compound interest, if you will, if one can compare growth rate to investing.

Unicorn-sized ideas that move the needle a lot do occur, naturally; but not often, nor regularly.

<comment><USER5> >I strongly concur with the sentiment laid out: never, ever, ever accept a marketing job offer where the yardstick is delivering the moon and more every Friday like clockwork.

"Hiring a growthhacker" is just code for "we don't have the money for a marketing department or even an agency so we want you to do everything yourself and find magic solutions to why our product isn't taking off and we really hope you have a friend who works at Techcrunch or we're all going to think you were bad at your job."

</comment></comment></comment></comment><comment><USER6> Be very specific about your goals or else the position will burn people out fast. There are many aspects to marketing. You may think you want a "person to get us leads", but you end up needing creative services, ad trafficking, content marketing, social media management, copywriting, partner marketing management, brand management, web development, and (grrrr) email template design.

Those are all very different activities with their own tiers of expertise. If you are still going to try for one person, ask them "is your strength in tactical marketing or strategic marketing?" If they answer "both" it's neither, or equally mediocre. You may think you need strategic, because you watched a few seasons of Mad Men. But, you probably need a tactical marketing pro with 3-5 years experience executing on their own.

</comment><comment><USER7> > Marketers from large companies are insulated from growth metrics by the > management layers above them.

I've found this isn't that consistent. If you're looking for a strong demand- gen marketers you can also look at the larger companies where that is core to their growth, like Expedia or Booking.com

</comment><comment><AUTHOR> Author here. Happy to discuss any questions or get your feedback.

<comment><USER8> Where's a good place to find marketing people? I feel I'm strong at finding good developers from various weird and wonderful channels, but I have no idea where to hire marketing types?

<comment><AUTHOR> Asking around your network, maybe [https://growth.org/](https://growth.org/) (I don't participate there but it's a large marketing community), marketers at companies you admire who've been there for 2-3 years and you suspect might be open to a change, and good marketing blogs. Some ideas to get you started, at least.

</comment></comment></comment><comment><USER9> I have been a hands-on marketer who has handled multi-million dollar campaigns every month. Apart from the post being slightly self-promotional (a pitch to hire the author as a consultant), I strongly feel this is not the way to hire your first marketing person.

This is pretty much like saying your first tech hire should be a VP of Engineering who can roll up their sleeves and do front-end and back-end and data-infra and create neural networks. Sure, maybe they can do it. But how good a job do you think he will do overall?

The first marketing hire, especially when you don't really know how to hire a marketing person, is going to be a gamble - no matter what the experience of the person is or what level of success the person has achieved in the previous company. I have hired very successful hands-on marketers who have failed terribly because the dynamics of the company changes. So does the target audience, the message, etc.

Often times, most marketers will take credit for the success their team achieved. For e.g. if you ask what was the metrics you handled, they'd most likely share the team metrics that was a collective responsibility and give you numbers based on that. You need deep experience to see through these claims.

Also, the first hire you make almost always needs to be tactical unless you have a large budget. But even tactical markets cannot do anything unless you have enough marketing budgets. Also, the medium of promotion is important. FB marketing is very different from LinkedIn marketing. Both of them differ from AdWords as well. These are almost entirely different from content networks like Outbrain and Taboola. Oh did I talk to you about DSPs?

Unless you know which medium you will be using to promote, you cannot hire a specialist. And there's no one who is going to be equally skilled in all channels. I have seen marketers waste tens of thousands of dollars because they wanted to try a new channel which they had no idea to optimize.

In short, don't think following this guide is going to help you make the right hire. Unless you are a marketer yourself, most likely you will make the wrong hire.

If I were to hire a marketer for a startup and I cannot spend time hand- holding the person, I'll just hire someone who has some experience running organic as well as paid campaigns and is willing to experiment and learn. Marketing is mostly a function of trial and error. So hire someone who is willing to do this.

</comment><comment><USER10> _Your first marketing hire should probably be a director-level person who can be made accountable for generating a sales pipelines, with experience at a company 2-5x your size._

Good advice. Many companies just hire the first jackass that talks a good game. But much of marketing is being a jackass that talks a good game.

</comment><comment><USER11> Thread jacking cus I'm hoping lots of marketing folks will read the comments. =)

I'm looking to bring on our first marketing hire (director-level) We're a tech-enabled service specifically in the property management industry. You can think of us as the PwC specific to our industry. (www.apmhelp.com)

We're at $100k/month in revenue ($35k mrr, the rest is one-time projects) and all of our growth in our 13 months since inception has been word of mouth and niche forums. We feel we've hit "product market fit" as we're able to do one call closes with our average deal size being $24k in AR for recurring clients.

Our primary target audience is older and definitely on Facebook so prior experience running campaigns on FB is a must.

DM if interested! We're completely remote and have big aspirations =)</comment>


Don't rely solely on your code base's latest snapshot. Rely on its history. - <AUTHOR> http://blog.ezyang.com/2010/02/history-as-documentation/

<comment><USER2> This is also another benefit of having an organized code-review system that records review comments perpetually. Oftentimes, I'll wonder why someone's using an obviously short-sighted and naive algorithm, only to look through the review comments and see the original author say "I know this is a bit of a hack, but it gets the job done now, we've got to check this in in the next two hours, and we can fix it later." Or I'll do the same and see, "I tried this elegant solution, but it doesn't work for reasons X, Y, and Z", saving me many hours of going down a blind alley.

It's generally good software engineering practice to build for your needs _now_ and not worry too much about anticipating your needs later. Code reviews naturally end up surfacing lots of concerns of the form "But what happens if the system changes in this way later?" If you have a record of that, then when the system actually _does_ change that way later, you can refer back to what the issues were and what potential solutions the original designers had in mind.

<comment><USER3> The example you gave should rather go into the code as a code comment. Esp. if it is only a hack, it is much better to give such a statement there instead of the commit comment.

The commit comment should more be about what you have worked on and/or what you have completed or so.

Btw., for a small team, the code comments itself may also be a good place to write the review comments into, maybe marked with a TODO or so.

In both cases, you have the information right there where you may need it.

<comment><USER2> If every design discussion we had in the review comments ended up as a comment in the code, the comments would be 10x longer than the code. There's one CL that I'm currently reviewing where the review thread is 41 messages long. That's not all that atypical for changes that require any sort of design discussion.

Though yeah, something that's a quick hack should have a " TODO(username): Fix hack. See review discussion in CL 12345678." to let the reader know that there's something else they should be aware of.

Basically, I think the code comments should say what the code does (and be rather sparse, usually, because you should be able to tell from the code itself), the commit comment should say what the _change_ does, and the reviewlog should say what the code _doesn't_ , i.e. roads not taken, design alternatives considered and rejected, tradeoffs made. The code always doesn't do far more than it does; putting that in the code comments makes it harder to follow what the code _does_ do.

</comment></comment></comment><comment><USER4> > never write a commit message without the diff in hand

To do this in git, use the --verbose flag with git commit. I use it in my configuration by default, and it really helps.

<comment><USER5> How do you set this by default? I looked through git-config, and elsewhere, but I couldn't find any way to do it, short of using a shell wrapper.

<comment><USER6> you can probably do something like shadow the commit command with an alias in your global pref file

<comment><USER7> git (sensibly so) refuses to permit aliases like that.

</comment></comment></comment></comment><comment><USER8> Comments with every commit are definitely important and helpful. And they have to be done while looking at the diff. The practice of reviewing and commenting diff not only helps in future maintenance, it also has immediate benefit -- help to identify bugs and silly mistakes in current commit. I don't use Git though -- I use Subversion.</comment>


Why I Love the Khan Academy - <AUTHOR> http://patrickmylund.com/blog/why-i-love-the-khan-academy/

<comment><USER2> I love the Khan Academy because I am finally grokking calculus... at the age of 37.

</comment><comment><USER3> After just talking about it for a while, I'm finally starting an online campaign to get Khan on the TED stage. He has an idea very much worth spreading. Hell, they even let me speak at TED, so please take a minute or two to nominate Salman Khan here on TED's speaker nomination form: <http://www.ted.com/nominate/speaker>

And if you've got another minute, nominate Paul Graham, too!

(edit: I'm an employee of Y Combinator, making PG my boss, but I'd nominate him regardless of that fact.)

</comment><comment><USER4> Why I think the Khan Academy works so well:

1/. Videos are short, 10-15min digestible bits. Long enough to teach a concept, short enough not to lose my attention.

2/. He's a huge advocate of teaching intuition behind concepts instead of memorization. This makes learning less stuffy and more informal.

3/. Everyone has "holes" in their knowledge, but they are in different areas. Schools have a hard time to individually address weak points in each student's knowledge (particularly if you should have learned them in a prerequisite course). Videos organized by concepts allow you to address these weaknesses systematically.

4/. He makes mistakes! Those mistakes are quite insightful and give a glimpse into an art of solving problems that usually isn't presented in most lectures. You usually see a problem, and a solution thats a finished product.

5/. He doesn't have an ego. He's not breathing down your neck or thinking you're an idiot if you don't understand anything the first time. You can pause, google something, repeat, watch it anytime, etc.

</comment><comment><USER5> Though I'm a fan of Feynman anecdotes, I've always disagreed with the point of the one used in this article. Names _are_ important. You know what you get by knowing the name of the brown-throated thrush? You get an identifier by which to look up all the collected knowledge of humanity on the brown-throated thrush, and you gain the ability to talk about it with other people.

In the online SICP lectures there's a nice point about names and how they give you power over things, but I couldn't find it right away.

<comment><USER6> Feynman's brown-throated thrush anecdote isn't saying that names don't serve a valuable purpose. As you've shown in your examples names are a tool to help us reference knowledge, but they are not the knowledge itself. Unfortunately people don't always make the distinction. This way of thinking may lead them to collect many references but very little real knowledge. That's the point I think Feynman was trying to make.

<comment><USER7> I find this point the trivial one. The surprising point is that names really do matter. I had no idea how many sycamore trees there are in NYC before I had a name for them; having a name also meant having a set of characteristics that let me label a tree as a "sycamore" - being able to apply a name to a thing also means recognizing the thing, and being able to communicate about it.

(Actually, probably London Plane trees, but don't let my ignorance get in the way of my point.)

<comment><USER8> He wasn't making a comment that the names don't matter - he was trying to rationalize why he gained an interest and appreciation for the deep-knowledge of science - not just how to look up reference material.

Names obviously matter - language and communication matter if we're going to collaborate on anything - but when it comes to science, to make new discoveries, the ability to look something up in a book is useless without the ability to understand how things actually work and fit together... and sometimes, books, and even the majority of people, are actually incorrect...

It's disingenuous to take that Feynman quote out of context and argue that it's an argument against naming... it's certainly not.

</comment></comment></comment></comment><comment><USER9> The Khan Academy content is currently concentrated in areas such as math, science, and finance. Do you think the approach can be applied to other disciplines; e.g., programming, business (other than finance), other social sciences? And how about more advanced levels of skill development?

In short, are there boundary conditions to the Khan Academy approach? And if so, what are they?

<comment><USER10> Khan Academy currently heavily depends on examples. Anything that you can teach by example is probably fair game. For example (ha!), his history stuff right now, while perfectly fine, I find no more engaging/effective than reading about.

That doesn't mean it won't work, just it probably won't be as effective for some other stuff as it has been for math and such.

<comment><USER11> I think it just becomes story-telling.

</comment></comment></comment><comment><USER12> mr. Khan and wikipedia are the two best things to come out of the web as far as I'm concerned. Project gutenberg third but at considerable distance.

Between Khan Academy and wikipedia education is pretty much limited by the amount of time you have to invest.

There was a character in a book that tried to learn by memorizing an encyclopedia, which as 'learning by rote' is not the most useful thing. But in wikipedia everything is interlinked, and you can dig down in to a subject as deep as you want, the references will give you the background. It's quite amazing how much you can learn about something just from there.

The Khan Academy is another part of education embodied in bits, a really good instructor that knows how to make subjects both interesting and understandable.

<comment><USER13> The Khan Academy is great. But, and I'm not really making any accusations at all, I hope amidst all this praise for what an admirable job he is doing and all the opportunities this affords for underpriviledged people that he stays on top of the quality and accuracy of the material. I just remember there being a few questions about some of his stuff on linear algebra. I also hope he will continue to add more advanced material to the various subjects, but I think that is his plan.

<comment><USER12> I think that's what's great about the whole concept, if you want to replace a lecture with a better one at a later date you actually can, so in the long term it can only get better, this just establishes an initial baseline, nothing will ever make it worse than this.

</comment></comment></comment><comment><USER14> The success of the Khan Academy is by orthodox educational standards _surprising_. That it _is_ surprising ought to tell us something: that the orthodox understanding of how education should be "delivered" is at least partly _wrong_.

We should be particularly suspect of the belief that higher production values are worth pursuing. Before KA, if you suggested that you could deliver unusually effective education through a series of ten-minute videos having truly horrible production values, the mainstream education industry would have ignored you. After KA, they can't.

What the success of the Khan Academy suggests is that production values are not important and, perhaps, that the pursuit of high production values is wasteful and even counterproductive.

Now that's an interesting hypothesis.

<comment><USER15> The _popularity_ is surprising; the success is still to be proven (how?). But you are right, its popularity can't be ignored.

</comment></comment><comment><USER16> I recommend watching this video where Khan discusses his vision for the future of online education.

<http://www.youtube.com/watch?v=wRf6XiEZ_Y8>

<comment><USER17> His social value calculations towards the end of that video are not to be missed -- it was quite the pitch.

</comment></comment><comment><USER18> This kind of surprises me. I love Khan's lecturing style, and he makes good use of a paint program to stand in for not having an overhead transparency to scribble on.

But as to his teaching style, the videos I've seen have caused me to react less like Patrick Mylund and more like this MetaFilter poster:

[http://www.metafilter.com/78770/Welcome-to-the-Khan- Academy#...](http://www.metafilter.com/78770/Welcome-to-the-Khan- Academy#2435418)

Perhaps there's an ordered curriculum you're meant to go through, but every time I've sampled Khan's videos at random they've been structured as "if these are the exercises you need to do right now, now you can see me solve one."

Sure he does a good job of narrating his steps, explaining details and side- effects, and making illustrative mistakes. I just feel like he's all about the how and never about the why.

</comment><comment><USER19> I watched a couple of those videos after reading about it here and, while they were nice, they didn't stand out as something very special to me. Maybe it's because his style feels close to the way that I like to teach, or maybe you guys had way more sucky teachers than I did (though I don't think my math teachers were particularly good).

I don't want to disrespect the effort he's going through setting up all the online content, that's clearly something very useful to those that don't have access to real people to learn with. But to hold him up as as especially awesome and unique seems to ignore the thousands of equally awesome teachers that are out there teaching like that every day.

<comment><USER12> I think you mis the most important part of what the Khan Acedemy is all about, it is open 24x7 365 days per year and it is 100% free.

He doesn't have to be 'outstanding' or even 'great' to have an enormous impact on the world.

<comment><USER19> What you say is true, but that is _not_ what the article argues is the most important thing about it.

There are books where you can learn physics and math, and while they aren't free but neither is the computer you need to look at his videos...

<comment><USER12> I would say he hits the sweet spot between 'inanimate book' and 'personal teacher' pretty much dead on.

Computers and internet connections reach places on the planet where very few physics books go, and embody potentially every book ever written + all the free content available out there.

</comment></comment></comment></comment><comment><USER20> Take the khan academy, make a transcript of every course for those who hate videos like me, and you have a winner.

Of course, make it interactive and with lots of visuals for better learning.

There you have it, a great idea for a startup.

<comment><USER15> You can check out my lectures here <http://inperc.com/wiki/index.php?title=Category:Courses> (math only). These are written lectures but they start at about the same place as Khan's (in a real classroom though). Hundreds of illustrations but I haven't figured out the "interactive" part yet.

</comment></comment><comment><USER21> Khan Academy is a good resource if you haven't a good teacher and you have a lot of time for learning.

With a good teacher you can learn more with less time. If you are in a small group you can ask the teacher and you will learn that he can give you not only the answer you are looking for but a new perspective about that subject.

So Khan Academy is a good resource in certain occasions, but never as a good teacher should be.

</comment><comment><USER22> Why I love ? Because almost after a decade from high school class, I realize why it is that way. His lessons are short, engaging and teach you the basics. I could only wish I had someone with quarter of Khan's talent to teach me math and science.

</comment><comment><USER23> I'm taking Math and Physics at uni in a pre-engineer year. Khan Academy is making me learn a lot! My physics teacher is not that good, Sal however is an amazing communicator. If you only visit the site shortly you will only see the youtube videos but looking closer you will find the real gem: The application guiding you through math and physics. If you can answer all the questions correctly you know have learned everything you need to know to pass a exam! :-)

<comment><USER24> I would highly suggest watching the Walter Lewin videos from mit. They are what got me through a mediocre at best, terrible at worst teacher in physics. I used him heavily for electricity and magnetism and some for the classical mechanics stuff. Excellent teacher!

[http://ocw.mit.edu/courses/physics/8-01-physics-i- classical-...](http://ocw.mit.edu/courses/physics/8-01-physics-i-classical- mechanics-fall-1999/)

[http://ocw.mit.edu/courses/physics/8-02-electricity-and- magn...](http://ocw.mit.edu/courses/physics/8-02-electricity-and-magnetism- spring-2002/)

[http://ocw.mit.edu/courses/physics/8-03-physics-iii- vibratio...](http://ocw.mit.edu/courses/physics/8-03-physics-iii-vibrations- and-waves-fall-2004/)

<comment><USER25> If you can manage to deal with silverlight, I'd add Richard Feynman's Messenger Lectures. (Thanks Bill Gates)

<http://research.microsoft.com/apps/tools/tuva/index.html>

</comment></comment></comment><comment><USER26> I struggle with proving big oh, thus I wonder if (Kahn) or anyone else can help me prove that: t(n) <= cg(n) for all n >= 0 and here is the example I do not grok, where I'm gonna prove this assertion: 100n + 5 ∈ O(n^2). This proof goes like this: 100n + 5 <= 100n + n = 101n <= 101n^2 I struggle basically with wrapping my brain around the proof there. What is going on?

</comment><comment><USER15> According to my computations, the total amount of content isn't that large. It's about 36 credit hours total and I am being generous here.

<comment><USER13> That's probably about right. But he is only one person. :) He is planning to expand. But I do hope he gets more upper level stuff in there.

</comment></comment><comment><USER27> he was at sunfire offices last weekend giving a talk i believe. anyone here go to that?</comment>


Learn SQL The Hard Way - <AUTHOR> http://sql.learncodethehardway.org/ <comment><USER2> I think Zed has found a great place to call home as I just realized he's created his own brand with LxTHW. I can envision LxTHW having a bright future with a lot of great topics awaiting his "Programming, Motherfuckers" attitude and amazing productivity.

Has anyone taken his teaching his online course?

</comment><comment><USER3> A self motivation trick, posting those outlines? :)</comment>


Show HN: My project : Load and display multiple wind-speed forecasts on one page - <AUTHOR> http://derefnull.org/wx

<comment><AUTHOR> In the spirit of "shipping it", I wanted to share this quick project that I made for myself and my friends: [http://derefnull.org/wx](http://derefnull.org/wx)

As an avid skydiver, I regularly check wind forecasts for multiple drop zones to determine which location is most suitable for the day of jumping. I was tired of manually entering each location each time I checked the weather forecast, so I created this app to simplify the process.

This web app will render multiple wind-speed forecasts on a single page for comparison. Once locations are entered in, the user can return to the page and refresh the forecast with a single click.

The app is nearly all client side, which is a new paradigm for me. The only server side component is a proxy script I made to get around a browser-side issue ([http://en.wikipedia.org/wiki/Cross- origin_resource_sharing](http://en.wikipedia.org/wiki/Cross- origin_resource_sharing))

The locations are validated with the Google Geocode API, stored in a client- side cookie (jquery.cookie), and rendered with Raphael JS. Weather forecasts are provided by weather.gov. Additional UI goodies use twitter bootstrap and some custom scripting as glue.

Note: this was written a modern browser (tested with apple safari, and google chrome, IE 10)

Next iteration : client side app-building is fun, but I think I can improve response time by moving much of the weather.gov queries server-side. This will also allow me to add a slick "share these locations" feature to the app.

<comment><USER2> Unfortunately, it doesn't work for me [Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36]

JS console says:

       Uncaught TypeError: Cannot read property 'firstChild' of null derefnull.org/wx/:290
       doParseWxXml derefnull.org/wx/:290
       forecastAsync_Update derefnull.org/wx/:148
       c jquery.js:4
       p.fireWith jquery.js:4
       k jquery.js:6
       r jquery.js:6

<comment><AUTHOR> Strange -- was that for a US-based location? I just tested it in windows based firefox & debian based iceweasel and it seemed to work ok. I don't have a Ubuntu system handy at the moment.

<comment><USER2> No, a couple locations in Europe.

I've just tried it with two locations in the US and it works with no errors. If I add to them a location in Europe there's an error:

       Uncaught TypeError: Cannot read property 'firstChild' of null derefnull.org/wx/:290

<comment><AUTHOR> Ah ok -- that makes sense, as the data is sourced from weather.gov which handles only weather data for the USA. Sorry about that :)</comment></comment></comment></comment></comment>


Shop gets trademarks [Sheldon Cooper|Gamer|Geek Nerd|:] + sues tech shops [GER] - <AUTHOR> http://www.onlinewelten.com/games/netzweltgeschehen/news/unternehmen-sichert-markenrechte-begriffen-gamer-sheldon-cooper-verschickt-massenweise-abmahnungen-124451/

<comment><AUTHOR> To be exact, they currently send around "Abmahnungen" (written warnings; [http://en.wikipedia.org/wiki/Abmahnung](http://en.wikipedia.org/wiki/Abmahnung) ). Germany is quite "special" in these laws, and there is a lot of abuse of this here. You can just wonder what the actual trademark owners are thinking about this (and how someone can be convinced of officially registering terms like "Gamer").

They secured these terms: 3020130411641 | Sheldon Cooper 3020130411668 | Geek Nerd 3020130531612 | Barney Stinson 3020130537076 | Walter White 3020130606299 | Gamer

(registrations can be viewn here: [https://register.dpma.de/DPMAregister/marke/einsteiger](https://register.dpma.de/DPMAregister/marke/einsteiger) )

More information on the blog of the biggest affected shop: [http://www.getdigital.de/blog/fall-trade-buzzer-abmahnung- ge...](http://www.getdigital.de/blog/fall-trade-buzzer-abmahnung- gerichtliches-verbot-der-benutzung-von-geek-nerd/)</comment>


Synthasite Buys Clickpass - <AUTHOR> http://www.techcrunch.com/2008/12/18/synthasite-buys-clickpass-i-see-zero-synergies/

<comment><USER2> Is this "acquired" in the pownce sense of the word?

Seems like a similar sort of deal. Are these going to be common in the downturn?

Congrats anyway.

</comment><comment><USER3> Sounds like someone took pgs advice and bought early.

</comment><comment><USER4> Thanks for the kind comments guys. We're really excited about the outcome, SynthaSite's a great company and doing some very cool things.

</comment><comment><USER5> Peter is a lovely fellow so I wish him all the best with this. It's great to see Clickpass moving forward. :)

</comment><comment><USER6> Do they still get t-shirts?</comment>


Google Sued Under Illinois Biometric Information Privacy Act - <AUTHOR> https://www.lexology.com/library/detail.aspx?g=51dd0122-9399-48e9-b6ef-fc357760d387 <comment><USER2> This lawsuit seems dead on arrival.

From the article (emphasis my own):

""" The suit alleges that Google is violating BIPA because it is "actively collecting, storing, and using—without providing notice, obtaining informed written consent or publishing data retention policies—the biometrics of millions of unwitting individuals _whose faces appear in photographs_ uploaded to Google Photos in Illinois """

From the text of the BIPA law (again, emphasis my own):

""" Biometric identifiers do not include writing samples, written signatures, _photographs_... """

This interpretation of BIPA would seem to require complex written consent for every corner store running a security camera and every wedding photographer, which clearly isn't the intent of the law. Since the law explicitly carves out photographs, the use to which Google is putting the material in question should be irrelevant; it's explicitly excluded from this law's coverage.

<comment><USER3> I have to point out that his exact argument has been made and rejected by the courts in multiple cases already.

> Shutterfly maintains that by excluding data derived from photographs from > the definition of "biometric information," the Illinois legislature intended > to exclude from BIPA's purview all biometric data obtained from > photographs... As Shutterfly acknowledges, if biometric identifiers do not > include information obtained from images or photographs, the definition's > reference to a "scan of face geometry" can mean only an in-person scan of a > person's face. Such a narrow reading of the term "biometric identifier" is > problematic in many respects... The definition of 'biometric identifier' > does not use words like 'derived from a person,' 'derived in person,' or > 'based on an in-person scan,' whereas the definition of 'biometric > information' does say that it is information 'based on' a biometric > identifier."); The Illinois General Assembly clearly sought to define the > term "biometric identifier" with a great deal of specificity: the definition > begins by identifying six particular types of biometric data that are > covered by the term (i.e., retina or iris scans, fingerprints, voiceprints, > scans of hand or face geometry); it then provides a long list of other > specific types of biometric data that are excluded from the definition. If > the legislature had intended a "scan of face geometry" to refer only to > scans taken of an individual's actual face, it is reasonable to think that > it would have signalled this more explicitly.

[https://www.courthousenews.com/wp- content/uploads/2017/09/Sh...](https://www.courthousenews.com/wp- content/uploads/2017/09/ShutterflyRuling.pdf)

<comment><USER2> Interesting. My plaintext reading of the law interpreted "scan of face geometry" as a full 3D mapping (i.e. photographic plus infrared rangefinding), and I stand corrected on the intended reading of the text.

<comment><USER3> That is an argument which no one has tested in court yet. But it seems unlikely to succeed as the law doesn't specify any requirements on how "biometric identifiers" such as face geometry are collected. And indeed the courts appear disposed to allow the phrase to cover any extraction of face geometry data regardless of the technological means by which it is done.

</comment></comment></comment></comment><comment><USER4> To save y'all a click: The alleged biometrics in question are the use of facial-recognition software on photos uploaded to Google Photos (without informed consent from the user).

<comment><USER5> I remember google popping up a consent to store the AI models for the facial recognition locally on my phone (not in the cloud)! If this is the case, the lawyers are wasting their time, I guess.

<comment><USER6> I've never received a popup like that, nor ever heard of anyone receiving one. Are you in Illinois?

<comment><USER5> UK. I recently bought a new phone and when I opened google photos app for the first time, it asked to store local trained models to enable AI features for the app.

</comment></comment></comment></comment><comment><USER7> If a friend clicks a photo of me and uploads it to Google Photos, IMO, it's not okay for Google to use my face to train models without explicit permission from me.

Unfortunately, as is often the case with technology, laws have not kept up with the lastest developments, and likely will not in my country for several more decades. Welp.

<comment><USER8> Just to be pedantic in the spirit of HN. Google isn't training models w/your face from your photo library. The way face recognition works is that Google would collect a dataset somehow and label that for the various feature and train a model for face recognition. Usually this is done with a carefully curated dataset that would be sure to include various ages, genders, ethnicities, lighting conditions, angles, and camera types.

When you use Google Photos, it is using that pre-trained model to determine the features of the faces it finds in your library and it builds a vector, which is just a long string of numbers (also known as a face template or feature vector) that represents each face. Through various machine learning techniques it is able to compare 2 vectors to see how close those 2 faces are alike. If the confidence score it finds is higher than some predetermined threshold (say 70%), it is assumed they are the same person. Running these comparisons over and over through all the photo pairs, the software can group or cluster faces so that it knows all these photos have person 1 and these photos have person 2. Google never knows who those people are, unless you tag those images with a name.

The images in your camera roll aren't used for re-training the original model because Google doesn't know the ground truth about your photos. Google can guess that these 3 faces are the same, but it doesn't know for certain that they are, so they can't use that to retrain the model that would be used in the Photos app because they have no way to judge the accuracy.

Another interesting point is that the vector is also unique to the specific model that was used to create it. So, if in the future they do retrain the model, the vectors that had been created with previous models would be 100% incompatible with the new model and would need to be recreated from the source image.

Note: I have no inside knowledge of Google, but as the former CTO of a facial recognition company, I have a good idea how these systems work in general.

<comment><USER9> Google absolutely allows you to confirm it's tags and uses that for retraining, which means yes, my facial profile is collected, stored and used for model training (unless you disable it in preferences).

You can't do "celebrity" recognition from a generalized data set.

<comment><USER8> Logically, that doesn't seem likely because that would mean any individual or set of individuals, could enter false data and poison Google's model going forward.

</comment></comment></comment></comment><comment><USER10> Whose consent is needed, according to the law? The person who took the photos, or the person being photographed? And is the consent required only if the product is used in Illinois? Or if the photo is taken in Illinois? Or if the person photographed is a resident of Illinois?

(I read the law, and it appears to cover the person being photographed, if the photograph is taken in Illinois. So basically according to the law Google ought not build face models from photographs taken in Illinois, except of people who have consented.)

I wonder if in the broadest configuration (basically any configuration other than "consent of the user, who is a resident of Illinois"), this law would probably be struck down as an unconstitutional restraint on interstate commerce? I guess we'll see! Should be exciting.

<comment><USER3> BIPA requires the consent of the person that the biometrics identify. However it specifically excludes photographs from the definition of biometric information so its not clear how it applies in this case.

<comment><USER4> It excludes photographs, but includes certain data derivable from photographs. Storing the photograph is not a violation, but the lawsuit alleges that the facial recognition software that Google runs constitutes a violation.

</comment></comment></comment><comment><AUTHOR> We have a large client/customer in Illinois who has decided against using our voice sdk in their iOS/Android app because of the fear of getting sued for BIPA violation. It's not that they think we're creating voice prints without consent, it's just that their legal team has warned them that if they get sued, it could be very costly to defend. We even changed our privacy policy to note that "biometrics" are not obtained, and even went to on-device speech recognition apis provided by Google and Apple.

<comment><USER11> What about using truly on-device options that aren't connected to cloud services at all? Picovoice, DeepSpeech, etc.?

</comment></comment><comment><USER12> Profiteering lawyers as middlemen to technology application is what these overly strict privacy laws are trying to establish and that's a shame.

<comment><USER13> That's what all this stuff inevitably becomes unfortunately. It's a shame that lawyers have to mediate our access to our rights. I sincerely believe if we replaced high school with law school we'd all be much better off.

<comment><USER14> The barrier here isn't really the need for a law degree. Prosecuting these kinds of cases against deep-pocketed defendants like Google doesn't only take expertise in the law, but the resources to review millions of pages of Google emails to establish how the system works and what Google's intentions were, as well as experts to opine on technical aspects as well as calculation of damages. There is no practical way for individuals without significant resources to prove up this sort of case on their own.

The realistic alternative is having government agencies prosecute these sorts of cases. It's a very good alternative, and is used in most other countries. It's an odd confluence of factors that results in private class action litigation being more popular in the U.S. (From the left, trial lawyers are major supporters of Democrats. From the right, Republicans would rather have these class actions than new government agencies.)

<comment><USER13> > The realistic alternative is having government agencies prosecute these > sorts of cases.

I wasn't saying the result would be that we each tend to our own legal matters instead of having regulatory agencies. I was saying that when only a tiny fraction of the citizens is legally literate, and only a small fraction of those people are actual trained lawyers, not many people are going to be looking out for our rights, muchless even know what those rights are or should be.</comment></comment></comment></comment>


Show HN: Fake SMTP server as a service - <AUTHOR> https://develmail.com <comment><USER2> "No fake recipient email addresses anymore, use real ones!"

This is a really bad idea. Keep PII far away from your test environments.

<comment><USER3> I completely agree - but I use mailtrap.io quite a lot. It's wonderful to be able to make up any email address and have mail sent to it from your test system, without having to run your own mail infrastructure.

</comment></comment><comment><USER4> On my laptop, where I do all of my development work, I just configured Postfix to send everything to plain files:

[http://harold.internal.org/configuring-a-dev-box-mail- server...](http://harold.internal.org/configuring-a-dev-box-mail-server/)

I like this a lot better than sending stuff out across the network.

<comment><USER5> [https://github.com/mailhog/MailHog](https://github.com/mailhog/MailHog) looks like a really nice alternative, where you can also test HTML mail, etc.

Personally, my local SMTP actually sends email, because I DO want legitimate email (mutt, cron) though, so I'd be scared to mix up two local smtp instances.

<comment><USER6> MailHog is pretty great. In response to your concern, by default it runs on a non-standard port, so you need to configure your apps to point at it (port 1025 by default). Even then, you can configure it to act as a MITM, where the webmail interface lets you "release" messages you actually want to send out: [https://github.com/mailhog/MailHog/blob/master/docs/CONFIG.m...](https://github.com/mailhog/MailHog/blob/master/docs/CONFIG.md#outgoing- smtp-configuration)

</comment></comment></comment><comment><USER7> You can just use MailHog for free, it works pretty good. [https://github.com/mailhog/MailHog](https://github.com/mailhog/MailHog)

<comment><USER8> I'm a fan of MailHog. It's simple for the whole team to setup and the optional chaos monkey button is a great way to make sure your email system can tolerate periodic failures properly.

It works locally and is really simple to setup for shared staging/prerelease environments, handles high volumes really well and the websocket auto-update system is great.

Personally, I'm a fan of using Mailhog for local and Mailtrap.io for shared environments because in my experience, non-technical testers have a better experience with Mailtrap and it's simple tie ins to review the look of emails on different platforms/clients.

Basically, Mailhog for local sending, does it send, can it handle failure, etc and Mailtrap.io for "does it look right?".

</comment></comment><comment><USER9> I don't like the idea of external SMTP for this when [http://danfarrelly.nyc/MailDev/](http://danfarrelly.nyc/MailDev/) can make everything works locally - and it's very easy to add in our Docker based projects.

<comment><USER10> SMTP4dev is a good option for Windows.

<comment><USER11> Personally I use Papercut and so far I'm pretty happy.

<comment><USER12> If you don't need the complexity of a full-blown visualisation UI, you can just (assuming you have Python on the machine) run

         python -m smtpd -n -c DebuggingServer localhost:1025

it will dump all mail to stdout.

(change port as you see fit, below 1024 requires root/sudoing)

</comment></comment></comment></comment><comment><USER13> Why not one-liners? Available on every Linux and Mac:

            python -m smtpd -n -c DebuggingServer localhost:1025

Oh and serve a directory as a website with this other one-liner:

            python -m SimpleHTTPServer <port>

<comment><USER14> you sir, just shut this whole thread down, methinks.

</comment></comment><comment><AUTHOR> Thanks for all the comments so far, we really didn't expect so many of them, even though most of them are suggesting alternatives (just kidding, we appreciate them as well :)

We are especially thankful for suggestions about what to change, improve or add, we will try to work on them and also probably change page design/theme to make it simpler and cleaner.

We know about most of the alternatives lot of you suggested (mailcatcher, maildev, etc...) and we used them a lot, but we created this so you can have it "installed" everywhere or maybe share account so other people from company could check emails, texts etc easily.

And we wanted to publish this MVP as soon as possible to check if there is at least some interest in such thing (and even our server couldn't handle it sometimes :)

</comment><comment><USER15> This seems similar to [https://mailtrap.io](https://mailtrap.io)

<comment><USER16> I've used mailtrap with great success on a Django application that I used to work on. It really is great to just change the SMTP config for the mail sending service without having to worry about adding checks for "if in testing send all emails to a particular address".

Would this service have any benefits over what mailtrap offers?

</comment></comment><comment><AUTHOR> We created this for our usage, but decided it could be useful for other people too :)

It's still under development, so there are not many features yet, but we would like to hear your opinions and what could we improve or add.

Thanks!

<comment><USER17> One very useful feature would be to add up to date filtering systems in report only mode (eg SpamAssassin), SPF / DKIM / DMARC checks, etc. Without having your own up to date inbound MTA, it's very difficult to test your own mails for things that might be triggering spam filters.

<comment><USER18> Do those services really have a feature like that? That seems like they wouldn't people to easily figure out if an email the have sent makes it through filters. Maybe I'm wrong, I have never had to worry about email in a business environment.

<comment><USER19> SpamAssassin, DKIM, SPF, DMARC are all things that you can check locally, so yeah, you can def. determine if an email is going to get through at least _basic_ filters. Note that SpamAssassin is more a framework, and that a lot of this stuff is going to be bayesian/machine learning kinda stuff, so while you may get through basic level filters, people pay a lot for the higher end stuff, and you _can 't_ test those kinds of things. (barracuda email filtering and that kind of thing)

</comment></comment></comment></comment><comment><USER20> So this is useful for:

1\. developing software that sends e-mails, but not having to set up a test environment/pray you don't break production, and

2\. testing out new software that insists on sending e-mail when you're just one person in a small/localhost-only environment.

I love it.

One thing I'm sad to see is that there seems to be no TLS/STARTTLS support on the side of develmail. Given that TLS can be a bit finicky to set up and that plaintext SMTP is ideally deprecated as fast as possible, it may be worth a thought to just Let's Encrypt it.

<comment><AUTHOR> Thanks! We understand that encryption is a must, we plan to add this feature as soon as possible.

</comment></comment><comment><USER21> Some years ago I wrote a tool called mailcat, which is a fake SMTP server that prints the incoming emails to stdout. I use it to this day when I need it in development. It's available at [https://github.com/soveran/mailcat](https://github.com/soveran/mailcat)

</comment><comment><USER22> At my previous company we used mailcatcher[1]. Worked fine, but with lots of e-mails, the service might crash.

[1] [https://mailcatcher.me/](https://mailcatcher.me/)

</comment><comment><USER23> You already have an SMTP Server for testing on your OS:

sudo python -m smtpd -n -c DebuggingServer localhost:25

</comment><comment><USER24> I think some are being a smidgen too hard and dismissive about this.

That you can do this a bunch of other ways isn't really the point at all. Doesn't even matter if it's easy to do.

The point is to make it very easy to do and to provide some additional features in the process.

I am all for "another way to do it" and especially if the goals are making it easier while adding functionality and it doesn't cost me anything.

That's a "win win win" even if you never use it.

</comment><comment><USER25> I need to make a Username/Password/Domain Checker As A Service. Just send me your bank account credentials and I will verify that they work for you.

</comment><comment> old-gregg pogo77, congrats on launching. somewhat random comment: your site is completely broken when JS is disabled. This is usually not a problem for general Internet population, but somewhat important for your target audience who's got fed up with laggy JS animations and battery drain and installed NoJS with aggressive settings.

<comment><USER26> It's even broken with enabled JavaScript, but disabled Cookies. Sadly lots of sites are nowadays.

</comment></comment><comment><USER27>
        As a startup we currently offer one simple subscription program completely for FREE!
        Meanwhile, we are working hard on our paid plans with plenty of new features, everyone who signs up for our current free plan will be automatically migrated to our highest paid plan for free forever!
        **In case of excessive or unreasonable use of service, additional limits may be applied

As a developer, I appreciate being able to lightly use a service for free. I also appreciate that people have to be paid. It's ok to charge for something that gives value to other people. I think that promising early users to be free forever is short sighted. Maybe they have to offer it for free because it is relatively easy to just spin up your own SMTP sink locally.

<comment><USER28> * I would not use a free service - I want to know that my company is a customer. I want recourse/support if there a problem. That said - be sure to get insurance, for when there is a fck up.

* I want to pay to make sure that companies we use stay in business.

* If my business is using your services to make money - you should be able to ask for money easily.

* The "free forever" send the message that you are shy about asking for money.

* Start testing pricing now. (with the price "reduced" to "free" \- ie use strikethrough)

* Remember a startup is only a business if it is charging for its services. Otherwise, it is just an expensive hobby.

</comment></comment><comment><USER29> In a Java environment, we spin up an instance of Dumbster [0] using our test harnesses, run our integration tests and tear it back down.

[0] [https://github.com/athalay07/dumbster](https://github.com/athalay07/dumbster)

</comment><comment><USER30> For testing/dev at work, I wrote a little go app that listens to SMTP on port 2525, collects mail into a boltdb, and presents it in a very simple web UI (port 7070) that lets you browse users and their mail. (A simple drill-down of list of users / emails for user / message details, including all mime parts and download links for attachments. The top page has a "clear" button.)

It was an evening's work, so it's very simple, but it works and we've found it very useful. (The original idea was to very simply expose the application flows involving mail to selenium, but I've found it very useful for dev, too.)

</comment><comment><USER31> > _No fake recipient email addresses anymore, use real ones!_

What if you send to the wrong server by mistake; not to develmail.com? develmai.com won't save your butt then.

Say something breaks in your configuration, and some mail-related layer resolves the address directly to an MX host and sends it there instead of the SMTP forwarding host it is supposed to be using ... know what I mean?

If you don't want packets to go to the wrong place, isolate your test box physically: e.g. 192.168.0.x "lab" network with no gateway to the Internet your intranet.

<comment><AUTHOR> You're right, but it's just a suggestion. It's really up to you how you use the service, sometimes it might be handy to see real data :)

<comment><USER31> The point is that you _can_ use real data with your own isolated test bed.

I'm not going to involve some random thing on the Internet in my test setup!

For one thing, I'm pretty sure I'd be violating a document that I signed about promising to safeguard my client's IT security, secrets and intellectual property.

Real data could be sensitive.

Anything of this sort that you set up will eventually be used by other people, who don't always know the full ramifications of what they are using. Somewhere down the line, someone will leak something into the test system. Maybe a user ID or password. Names of clients. Whatever.

Also, a test system has to be reliably operational. According to Murphy's Law, someone's thing you depend on on the Internet gonna disappear exactly when a lot of integration activity starts happening before a release.

Lastly, you should control every aspect of a test tool. Exactly how someone's SMTP thing handles SMTP could change in subtle ways from one day to the next.

</comment></comment></comment><comment><USER32> Is this something people would actually pay for? Why not just set up a box running Postfix with a catch-all address and an outbound block on 25/TCP?

<comment><USER11> You answered your own question: that is a lot more work than using either this or one of the purpose-made packages like papercut or smtp4dev.

</comment></comment><comment><USER33> Thanks for keeping it for free. I use mailtrap.io and haven't ever hit their limits, but having it as a free service to the community is appreciated.

</comment><comment><USER34> Sounds like inbox.py: [https://github.com/kennethreitz/inbox.py](https://github.com/kennethreitz/inbox.py)

This is the simplest SMTP server you'll ever see. It's asynchronous. One instance should handle over one thousand emails per second.

</comment><comment><USER35> Anyone using postfix already has smtp-sink in their arsenal. You already have a fake SMTP server.

</comment><comment><USER36> I missed the signup button as it was white and the image HD not loaded.

I suggest adding another signup button at the bottom of the page. After I read the features I scrolled back up to look for a signup button which is when I noticed it was white as background image had loaded.

</comment><comment><USER37> I made my own little debugging SMTP server in C# some time ago: [https://github.com/vmp32k/MailBug/releases](https://github.com/vmp32k/MailBug/releases)

It's not pretty but it works well enough. :)

</comment><comment><USER38> Uh, maybe consider changing the styling/colors of that image slider at the top of your website: [http://imgur.com/a/EY3sU](http://imgur.com/a/EY3sU)

</comment><comment><USER39> I've been using this for ages, works like a charm [https://github.com/rnwood/smtp4dev](https://github.com/rnwood/smtp4dev)

</comment><comment><USER40> Locally you can run papercut [https://papercut.codeplex.com/](https://papercut.codeplex.com/)

</comment><comment><USER41> Shameless plug

[https://github.com/SpartaSystems/holdmail](https://github.com/SpartaSystems/holdmail)

<comment><USER42> Yes - I worked on this as well. Very similar concept to some of the other solutions here. Self-hosted (keep mail internal, fast) - Invent any email address you like (†), trap it all here. View it via the app, or query via REST. Designed to be open, this is really useful when you don't want to have to setup mailboxes, or deal with the additional header of catch-all addressing. I'm currently adding attachment support for the next release.

† This comes with the caveat that you don't use PII, because people make configuration mistakes - but if that's how you do testing, then I'd argue you have bigger problems in your organization than capturing mail. We use it with firstname.lastname@example.com, email@example.com, rather than just sending stuff to _real_ addresses.

</comment></comment><comment><USER43> Why not?

#sudo python -m smtpd -n -c DebuggingServer localhost:25

Works pretty well for me.

</comment><comment><USER44> Anyone seen something like this for webhooks? I want to quickly see the contents, headers and logs without building the middle-man myself.

<comment><USER45> [https://requestb.in/](https://requestb.in/)

<comment><USER44> thanks!

</comment></comment></comment><comment><USER46> honorary mention: [https://10minutemail.com/](https://10minutemail.com/) :)

</comment><comment><USER47> Is this able to track bounced mails? Then it could be used to verify emails :)

</comment><comment><USER48> Mailinator does this too of course (with API)

</comment><comment><USER49> mailtrap.io?

</comment><comment><USER50> Please stop hijacking scrolling. Thankyou.

<comment><AUTHOR> Sorry, we didn't notice that. The design comes with this feature, but we will probably change it very soon.

<comment><USER51> Your first slide looks like this over here: [http://i.imgur.com/2Wzbe3Y.png](http://i.imgur.com/2Wzbe3Y.png)</comment></comment></comment>


Loneliness – What characteristics are associated with feeling lonely? - <AUTHOR> https://www.ons.gov.uk/peoplepopulationandcommunity/wellbeing/articles/lonelinesswhatcharacteristicsandcircumstancesareassociatedwithfeelinglonely/2018-04-10 <comment><USER2> I find the bar charts on that page very hard to read some reason, it's like they are not as intuitive as they could be.</comment>


Delicious Closing Leaves a Bad Taste in My Mouth - <AUTHOR> http://www.thisisgoingtobebig.com/blog/2010/12/17/delicious-closing-leaves-a-bad-taste-in-my-mouth.html <comment><USER2> >There's no reason to panic. [http://blog.delicious.com/blog/2010/12/whats- next-for-delici...](http://blog.delicious.com/blog/2010/12/whats-next-for- delicious.html)

</comment><comment><USER3> "To shut off such an important asset in the history of Web 2.0 really means they'll pull the plug on anything."

I wonder if we'll ever see "historic districts" on the web in some form. I can't come up with any idea of how it would work, but I'll be fascinated to see how historians deal with the ephemeral nature of web content.

<comment><USER4> You haven't seen the Wayback Machine?

<http://www.archive.org/web/web.php>

<comment><USER5> In addition to that I just came across <http://www.mementoweb.org/>

Asides, delicious says it isn't closing shop.

</comment></comment></comment><comment><USER6> Wow, Fred Wilson DOES use punctuation sometimes.</comment>


Tell HN: Looking for a startup idea? I would pay for an awesome Flexbox tool - <AUTHOR> Flexbox is an amazing standard but it's still a pain to work out how to get it to do what I want it to.<p>Better tools are needed and I waste so much time fiddling with Flexbox settings.  If an amazong tool was available for tweaking Flexbox I would happily pay for it. <comment><USER2> Sure. How much would you pay? What are your main challenges? What kind of tool specifically?

I agree with your sentiment, but curious to see what you ran into specifically.

<comment><AUTHOR> Things like "Hmm, I have a box on my page. I want a another box within it. Inside that box I want a heading on the right and a button on the left, each inside their own box." I would be so much easier to draw something like this out and then copy and paste the CSS."

A bit like this but going alot further [http://the- echoplex.net/flexyboxes](http://the-echoplex.net/flexyboxes)

I'd pay $50 as a once off for a really useful utility. It would be even more awesome if it came with a pre built set of UI widgets that I could drag and drop on and build up an interface, like Balsamiq. Once you have something like that then you're getting something really useful.

And then if you were super clever somehow you would have made a user interface builder that you could then directly hook somehow into the react component lifecycle and the world would be an amazing place.

Your skills would need to be at "wizard" level to make all this happen. Are you a wizard?

If you have the skills to do this programming then this is an idea for a real business, as opposed to all these startups doing the next "uber for food delivery".</comment></comment>


How GraphQL Replaces Redux - <AUTHOR> https://hackernoon.com/how-graphql-replaces-redux-3fff8289221d <comment><USER2> GraphQL is a convention on communication, like REST. Redux is a way to manage application state. They are apples and oranges. You could ostensibly feed a Redux store with GraphQL.

This post is like all the others that tout, "moving from X language to Y saved us $3,000 per month on AWS" – it's usually not the transition from one tool to another, it's the fact that you rewrote your application with more knowledge and insight into the problem and have simply done a better job. Or in this case, a misuse of Redux led to a transition to GraphQL which painted Redux in a poor light.

There still isn't a compelling solution to problems like this... Apollo certainly isn't it. I want to feed GraphQL & REST into a central datastore in my application (be-it a Web/SPA/Browser app, or a local app) and abstract away the guts. A lot of devs are leaning on GraphQL for small experimental apps, fetching data in their components and violating every rule in the book on SRP and SOLID. It works for MVP's and hobby projects, but when you have a larger team, userbase, etc... the abstractions become critical.

We, as an ecosystem, need to focus more on those abstractions and not on the one-size-fits-all buzzword tooling. Server <> Datastore <> Application, not Server <> Application with the library of the week bolted in.

<comment><USER3> So this apple/oranges thing is true and addressed in the article. Have you used GraphQL/Apollo? It can do a lot of the things you're wanting: \- You _can_ combine multiple data sources into a central datastore using GraphQL (REST APIs + DB queries etc.., that's one of the major benefits of it. \- Apollo on the client can manage local state as well as server state in one standardized interface. \- GraphQL is great for MVPs and Hobby projects but is used for a larger projects as well (Shopify, Github, Coursera, Facebook, Pinterest, Product Hunt, I could go on...).

I'd suggest you give it a shot, it's super fun to work with and isn't going anywhere anytime soon.

<comment><USER2> A lot of the new work we do at FarmLogs is built with GraphQL. We've been running some critical apps with it and in a lot of aspects its a real joy. That being said, nested HoC's and the way it is used on the web is not ideal. Perhaps we are using it incorrectly there, but the documentation hasn't been a lot of help.

> You can combine multiple data sources into a central datastore using GraphQL > (REST APIs + DB queries etc.., that's one of the major benefits of it.

Would love to see the docs on this because I have yet to find it!

<comment><USER4> I think the GP is referring to Apollo Client 2's ability to abstract over the underlying data source. Their intro blog post for the 2.0 announcement gives a good overview: [https://dev-blog.apollodata.com/apollo- client-2-0-5c8d0affce...](https://dev-blog.apollodata.com/apollo- client-2-0-5c8d0affcec7)

</comment></comment></comment></comment><comment><USER5> They mention it in the article but forgot the caveat in the title:

      How GraphQL[1] Replaces[2] Redux

[1] Or any well designed back end API

[2] For some narrow, often simple applications. And even in those cases it usually doesn't replace redux as much as it augments it.

<comment><USER6> I've been using Apollo Client and React to manage state on a medium size React app (i.e. no Redux). Interested to hear your thoughts here. Have you been using Redux + Apollo Client + React on a medium to large app?

<comment><USER5> I've only used GraphQL (with Relay) on fairly large apps but in my experience the number of apps that don't benefit from some sort of client side state management tends to fall into a very small window.

Introducing state management doesn't come for free, of course. That is an extra layer of complexity that you have to reason and maintain. And if your app doesn't need any client side caching or you don't envision a need to have shared state between your components maybe you don't need to have something like Redux. But I feel like the use cases for those sort of apps tend to be pretty narrow.

edit: Another commenter mentioned a good point that gets to the heart of your question better than my rambling -- You are still managing state in your app - just with Apollo instead of Redux.

</comment></comment></comment><comment><USER7> GraphQL does not replace redux, Apollo sort of does but they solve different overlapping problems.

GraphQL is serializable & a graphQL query or mutation is conceptually the same as a standard FLUX action used by Redux.

The main difference is Redux intends to separate async logic & mutations, to make them easier to reason about in isolation. Apollo intends to remove the need to reason about async logic. In Apollo, you still have to deal with state mutations by refetching everything after any change, or writing verbose cache invalidation logic. So both Redux & Apollo make you reason about state mutations.

Apollo-link is like Redux middleware, it uses observables so its like redux- observable middleware.

If you treated Apollo like Redux, you'd have to fire a graphQL mutation as if it were a Redux action. In redux you can ignore an action. In Apollo, to ignore a mutation you would have to write custom apollo-link middleware to handle that action (mutation). As you can see redux & apollo solve overlapping but different problems.

If you are coalescing multiple API responses coming in over time, you may have a need for RxJS, not Redux. That is inherently a stream of events happening over time, so use a streams library (perhaps together with Redux).

</comment><comment><USER8> I started using the Apollo Universal Starter Kit.[0] They were using both Redux with Apollo GraphQL. This really bothered me because there were two stores. Apollo 2 doesn't use Redux for the cache anymore. I went ahead and first pulled out the Redux dependency using Apollo Link State.[1][2] Then I went ahead and removed the Redux-Form dependency using Formik[3] instead.[4] The project maintainers thought it was a good idea and removed Redux and Redux-Form dependencies from all the packages. If you are looking for a way to not use Redux with Apollo, it has been solved. Although Apollo Link State requires some more code, it does normalize the data which means selectors are not needed which is a nice way to think about the data.

[0] [https://github.com/sysgears/apollo-universal-starter- kit](https://github.com/sysgears/apollo-universal-starter-kit)

[1] [https://github.com/apollographql/apollo-link- state](https://github.com/apollographql/apollo-link-state)

[2] [https://github.com/adam-s/apollo-universal-starter- kit/commi...](https://github.com/adam-s/apollo-universal-starter- kit/commit/0a4109ec4fbf7d6cc1e5515f67284c9e1223b429)

[3] [https://github.com/jaredpalmer/formik](https://github.com/jaredpalmer/formik)

[4] [https://github.com/adam-s/apollo-universal-starter- kit/commi...](https://github.com/adam-s/apollo-universal-starter- kit/commit/bf940b15b1c1c3bbe7c9e1758f347c96ffd61aa3)

</comment><comment><USER9> The title is a little click-baity, but if I have it right, the OP is saying that: because you can control the shape of your data on the client (graphql) you don't have to write code to wrangle your response data into the shape of your react component's properties (redux).

Which kind of makes sense, but I'm more biased towards thinking you'd almost always need some client-side work to reshape the response data because the front-end will always evolve at a different pace to the graphql endpoint, which ultimately has to be implemented by the server. Unless the entire team reaches this amazing point where the "graphql schema" and the abstractions in the app are just always in sync. Isn't it?

(Also, I love redux. Almost can't imagine using react without redux for any application. I started using react unreservedly, because redux. After disastrous attempts at flux. Redux is not going away I think.)

<comment><USER3> This is true. Our team is a little unique maybe in that we can all modify the GraphQL Schemas when we need to (we're using Node.js + Join Monster so it's all JavaScript). I would say though that with our REST API, updating was a lot more involved as we'd have to add more boilerplate on the client side to support the new data structures, whereas with GraphQL, it's just updating the query.

</comment></comment><comment><USER10> Sounds like you could have made your feed items REST API return the top 3 comments as well...

Maybe the lesson here isn't that GraphQL is a magic bullet, but that designing your API for your business needs solves a lot of frontend complexity (even if it's not pure "REST").

<comment><USER3> That's true however at that point our API is not longer "RESTfull" and become very ad hoc. The cool thing we found with GraphQL is that the client can control the shape of the data it needs without any server side changes (assuming your schema exposes everything properly).

<comment><USER11> Why is returning say the three top comments not RESTful?

<comment><USER12> Because in rest, urls are supposed to specify a resource, but now your response is a resource and some other resources too.

Not saying that being pure to rest ideology is a good thing. I think it's a terrible fit for most applications more complex than a demo todo app

<comment><USER13> There's nothing "impure" about that. From Fielding's dissertation (emphasis mine):

"The key abstraction of information in REST is a resource. Any information that can be named can be a resource: a document or image, a temporal service (e.g. "today's weather in Los Angeles"), _a collection of other resources_ , a non-virtual object (e.g. a person), and so on."

By the way, REST is not an ideology, it's an architectural style. It defines a set of constraints, and specifies the advantages _and disadvantages_ of applying each of them.

</comment></comment></comment></comment></comment><comment><USER14> Seems like you were just using Redux incorrectly.

</comment><comment><USER15> What protections can you put in place to limit the client query?

It seems with an appropriate GraphQL query it would be possible to generate significant data retrieval server side.

<comment><USER4> The graphql tutorial has a chapter devoted to this: [https://www.howtographql.com/advanced/4-security/](https://www.howtographql.com/advanced/4-security/)

In a nutshell, you can limit the depth to which a query will resolve in order to prevent abuse. You can also go much further and whitelist a specific set of queries (which comes with some additional bandwidth wins!) See [https://dev- blog.apollodata.com/persisted-graphql-queries-wi...](https://dev- blog.apollodata.com/persisted-graphql-queries-with-apollo-client-119fd7e6bba5)

</comment></comment><comment><USER16> Redux is useful, just not as a primary store for model data.

For example, Found ([https://github.com/4Catalyzer/found](https://github.com/4Catalyzer/found)) uses Redux to keep route state. It's nice to use Redux in that context, because route state is global but also simple, not very hierarchical.

But for model state, Found integrates with Relay ([https://github.com/4Catalyzer/found- relay/](https://github.com/4Catalyzer/found-relay/)), because, as this article says, GraphQL reduces a lot of the REST/UI impedance.

</comment><comment><USER17> For a better introduction on how Apollo v2 (the graphql client) could replace redux, read this: [https://dev-blog.apollodata.com/the-future-of-state- manageme...](https://dev-blog.apollodata.com/the-future-of-state-management- dd410864cae2)

I've personally tried it (with special attention on its capability to manage local state) and it did work out pretty well, with a lot of redux boilerplate code eliminated and a more effecient workflow, better yet, now you just need to learn one graphql syntax to rule them all.

</comment><comment><USER18> TL;DR click bait. The author is replacing Redux with Apollo - a client side graphql library that HAS BUILT IN STATE MANAGEMENT, which he fails to differentiate or mention... Apollo is similar to the firebase event / subscription model.

[https://dev-blog.apollodata.com/tutorial-graphql-subscriptio...](https://dev- blog.apollodata.com/tutorial-graphql-subscriptions-client-side-40e185e4be76)

<comment><USER3> Did you actually read the article? I explicitly mention that Apollo uses Redux as a cache under the hood (although that's not required).

<comment><USER18> I reread it several times trying to understand how simply using GraphQL allowed you to eliminate the need for all actions / stores for your entire client side stack. It wasn't until I looked into Apollo that I understood what you had actually implemented.

<comment><USER3> Apollo is mentioned 4 times in the article. That's beside the point though, even using GraphQL with plain old HTTP requests would have removed a lot of the need for Redux in our case.

</comment></comment></comment></comment><comment><USER6> Question for Apollo Client users.

I've been using Apollo Client. When I add or delete data, I need to update the local store on Apollo.

How have you found your experience using the local store on Apollo versus Redux?

<comment><USER3> The local store in Apollo (at least the current version) _is_ actually Redux (and a good use case for it IMO). In our experience it hasn't been to hard to manage and it's nice that you can still use the Redux DevTools to inspect the state.

<comment><USER19> I don't think it is anymore, latest version depends on a custom cache implementation which does not seem to be based on redux.

</comment></comment></comment><comment><USER20> I'm a bit lost. Aren't they two different things? One is a DSL for APIs, the other one is a state manager.

</comment><comment><USER21> actually, apollo-client is building in support for REST, so you will be able to use apollo-link-state with your restful api AS WELL AS your graphql api.

That's the true "replaces redux" statement.

</comment><comment><USER22> Will you make a fresh HTTP request every time the client needs to render a component? You could persist data client-side to make things more efficient. It would be best to use a state container to manage this. Maybe something like Redux?

<comment><USER4> Naively, yes, but in practice this is one of the things a good graphql client library can solve. Apollo Client, for example, will bundle query fragments from all your components together into a single request, and manage caching under the hood for you.</comment></comment>


Lessons Learned from California's Pioneering Microgrids - <AUTHOR> https://www.greentechmedia.com/articles/read/lessons-learned-from-californias-pioneering-microgrids <comment><USER2> > These demonstration microgrids are delivering a reported utility bill > savings of 20 percent to 60 percent, primarily in avoided demand charges, > and some have successfully islanded during power outages.

Super promising. Especially considering how many parts of the state face _zero_ power this summer when PG&E tapers transmission in fire-prone areas [0, 1].

Not that power is normally that reliable in rural parts of the state. I had a friend in rural Sierra county who would _regularly_ experience intermittent black-outs. If the line running down the canyon to Sierra City (pop. 221) was knocked out by a fallen tree it could take a day or two for PG&E to restore power.

[0] [https://www.pge.com/en_US/safety/emergency- preparedness/natu...](https://www.pge.com/en_US/safety/emergency- preparedness/natural-disaster/wildfires/public-safety-power-shutoff-faq.page)

[1] [https://www.wsj.com/articles/pg-es-radical-plan-to- prevent-w...](https://www.wsj.com/articles/pg-es-radical-plan-to-prevent- wildfires-shut-down-the-power-grid-11556337671)</comment>


Pokemon Locator App for Pokemon GO - <AUTHOR> https://itunes.apple.com/us/app/poke-location-for-pokemon-go/id1137368412 <comment><AUTHOR> This new app I found which also does the same thing as Poke Radar. Don't know if it is effective or not.</comment>


Top EU court rules Bitcoin exchange tax-free in Europe - <AUTHOR> http://phys.org/news/2015-10-eu-court-bitcoin-exchange-tax-free.html <comment><USER2> main discussion [https://news.ycombinator.com/item?id=10433318](https://news.ycombinator.com/item?id=10433318)</comment>