Why Doesn't Anyone Want to Solve Duplication? - <AUTHOR> I've been doing CRUD programming & design for a living for decades. These systems are typically for tracking, categorizing, and reporting/searching on domain "things": people, tasks, complaints, products, customers, etc. I'm surprised at the amount of redundancy in typical CRUD stacks. Info about a given field (RDBMS column) and its associations is replicated all over the place. My attempts to produce stacks that factor out duplication seem to confuse other developers such that they'd rather live with duplication.
There are always exceptions (variations) that need to be applied. For example, the default field title of a given field might be too long for a given screen listing, being the user wants to see a lot of info on a single listing. Thus, an exception (override) is needed for that title on that page. A centralized "data dictionary" is useful, but cannot carry the entire load. Further, sometimes the variations need to be computed dynamically.
A way to manage these variations is needed that doesn't confuse developers. Perhaps if an industry standard were devised, then coders would just learn the factor-friendly system and we'd end the duplication. It feels to me the industry spends too much time chasing the latest UI trends/fads instead of factoring.
I find our tools are too rigid to even propose specifics of such a stack. Code and/or references to code would need to be managed in something akin to an RDBMS, and not a hierarchical file system nor OOP inheritance hierarchies. Trees are just too rigid. There are tools to automate duplication, but few that avoid it. Auto-dup only helps initial coding, not maintenance. Should we be expected to "just live with" duplication, or are our standards and tools lacking? <comment><USER2> I've felt your pain. So much so that I took 6 months off and put a lot of groundwork into starting a company that would solve this problem. But in the end, I decided to abandon it.

I realized that in order to be 10x better than the alternatives, I was going to need to solve some very tricky AI problems. For example, acurately deduplicating a customer record "John Doe" vs "Johnathon Doe" is not straightforward. Maybe it's two different people?. Maybe it's just a spelling mismatch? The system must have a great deal of context to accurately determine if the data is indeed duplicated. And even if it does, perhaps there's a perfectly good reason for the spelling mismatch. (e.g. perhaps one table is his preferred name, while the other is just referential, etc). In the end, deduplication often comes down to the requirements of the company and it's hard to generalize.

I think there's space in the market for this kind of business, but it'll be a slog. Unless you have a 10x solution (i.e. super AI), you'll be competing with the likes of Trifacta, etc. And it's hard to compete with that kind of sales force.

Really good question. Thanks for posting.

<comment><USER3> @jakequist I think trifacta and similar tools are aimed at "data analysis" more than operations.

I think the question is about line of business software and issues there are very different.

For instance there is a literature on record matching and good techniques exist, but without an exception handling workflow you don't have a way to deal with the unusual cases the code works up.

I would love to talk and share notes about what you did.

<comment><AUTHOR> Paul, you are correct. It's more about preventing duplication in the software design rather than cleaning it up after the fact (which is an interesting problem, but a diff topic).

Think of it this way: one could build a detailed Entity Relationship diagram (or OOP equivalent) in a machine-readable format with all the relationship and column-size constraints defined. One could then push a button and have a machine generate a working version of the software. Those tools do exist. But they are usually missing useful details and result in UI's poorly tuned for how employees will likely be using the system.

Many of the tweaks to make it "practical" will be exceptions or local customizations to the original ER diagram data. Those customizations/deviations are the bottleneck such that in practice most stacks use duplication of info instead. See DRY ("Don't Repeat Yourself") in software engineering slang sites.

</comment></comment></comment><comment><USER3> Standards and tools are lacking.

One take of the vision of the Object Management Group is that the application should almost write itself once you've figured out the data structures. The designers of Visual Studio Team Edition wrote this book:

[https://www.amazon.com/product- reviews/0471202843](https://www.amazon.com/product-reviews/0471202843)

which describes a hypothetical product which is much much better than VSTE.

It is a hard problem. The structure of common sense knowledge is something like: "A(x) is true" but "A(3) is false". In principle this kind of system would be good

[https://docs.jboss.org/drools/release/7.17.0.Final/drools- do...](https://docs.jboss.org/drools/release/7.17.0.Final/drools- docs/html_single/index.html)

but the error messages it returns often make no sense at all and I haven't learned the source code for the engine enough to be able to read them. Products like that have several different mechanisms that can be used to model "default logic" (X is true unless...) but there is no simple standard mechanism that makes people happy.

(Look at my HN profile and contact me if you want to chat)

<comment><AUTHOR> Part of the problem is that each shop has different conventions & preferences based on existing products/apps and domain-related issues. An out-of-the-box solution probably won't work well without tuning it for the shop, but there are often too many "knobs and dials" to know how to tune well without a big learning curve. A mix-and-match kit along with some sample reference apps may be a better approach rather than a sealed black box with lots of knobs (like Visual Studio). I'll consider your offer. Thanks

</comment></comment><comment><AUTHOR> There are similar prior discussions such as: [https://news.ycombinator.com/item?id=12061453](https://news.ycombinator.com/item?id=12061453) However, I'm not really talking about making fancy API's or complex abstractions, but more about just dealing with regular database column- oriented information. Although, there may be some overlap.</comment>


What distinguishes a good software engineer from a great one? - <AUTHOR> http://www.quora.com/What-distinguishes-a-good-software-engineer-from-a-great-one <comment><USER2> It's hard to answer this question because anyone who answers is implicitly claiming to be a great programmer instead of just a good one.

When I think of great programmers and think about what distinguishes them from me, I'd say it's probably their experience. The more you do it the greater you become at it. I've never looked at a project and thought to myself "wow I couldn't make that even after 10 years". I always think "I bet I can do it too if I spent the last 10 months working on it".

<comment><USER3> I'm a good programmer. Many people I know professionally may call me more than that.

I have a friend who, when he does stuff, I can look at and say that there is no-way I would ever come up with that. Once I've seen it, I can say that I could repeat that, given some time, but that isn't the same as coming up with the original idea and implementing it really well

That is a great programmer.

<comment><USER2> Can you give an example of something that, when you look at it, you just know you would've never been able to make by yourself?

"implementing it really well" mostly comes from dedication and attention to detail, in my opinion. And of course, you have to actually _care_ about the thing you're doing, and always keep in mind the user's experience.

<comment><USER4> I always point to a lot of the early work from John Carmack on 3d engines. There's a certain level of innovation and creativity in his mind that I may never have, at least when it comes to solving programming problems.

</comment></comment></comment></comment><comment><USER5> The same thing that distinguishes a good (fill in the blank) from a great (fill in the blank). Passion, drive, perseverance, experience, patience, brilliance, etc. If you want to be a great engineer, the problem is that you don't see yourself as a great engineer already. If you saw yourself as a great engineer, you would emulate all those wonderful words I mentioned before, because, well, that's what great engineers are. Fake it 'til you make it.

<comment><USER6> I am having a hard time coming up with a harder place to apply "fake it 'till you make it", because the way that will actually turn out is "fake it until your first big design project crashes and burns and possibly takes the company with it".

Fake it 'till you make it is for social skills, not engineering, and while social skills factor into being a great software designer it isn't even close to the whole story. The computer does not care whether you are faking it, it cares whether you've _got_ it.

<comment><USER7> I've been involved in projects where lead architects did indeed fake it till they made it. It scared the heck out of me once I found out what was going on, and the "making it" wasn't due to anything they themselves did, but in fact because of the team going above and beyond. It doesn't change the fact that in the eyes of senior management, this guy had "made it".

<comment><USER6> The topic of the day is great software engineers and I'm taking that to mean people who actually engineer software, not people who convince clueless management that they are great software engineers without actually being so. I acknowledge your point but I think it's not terribly related to mine. You may have had a "lead architect" but they clearly weren't even in the running for "great software engineer".

</comment></comment></comment></comment><comment><USER8> Most of the things mentioned in the comments are _co-factors_ ; that is, things often found alongside greatness, but not necessarily the cause of the greatness. They are also often found alongside mediocrity.

I prefer simple tests:

Bad programmer: It can't be done.

Mediocre programmer: It's never been done.

Good programmer: It can be done.

Great programmer: It's done.

<comment><USER9> I'd also accept "I'm doing it" from a Great programmer.

Somewhere in there should also fit, "Let me teach you how to do it too."

<comment><USER10> Or someone who recognizes that "There was a similar thing done in ..."

</comment></comment></comment><comment><USER11> I like the first answer from quora, but with one exception.. That being an understanding of business and priorities. Great engineers understand that ultimately, they're responsible for shipping product in a business setting.

In your personal open source project or side projects you can afford to be experimental and push the box, but when you're in a business setting, you need to balance the need to ship with the desire and drive to be experimental and solid. Get from point A to point B balancing risk, reward, and speed.

<comment><USER2> Really? I think programmers who focus too much on the business side tend to not be the greatest. Or how I should say it? The vast majority of business programmers are in it for the "job", so that automatically makes them not great programmers.

</comment></comment><comment><USER12> great programmers are very hard to work with and need a wingman for doc and cleanup.

<comment><USER13> Common misconception. Great programmers write clean code and document their work.

I loathe engineers who produce complex, unreadable code and have enough nerve to call that "cool". A great programmer knows when to refrain from saving two lines of code to spare the next person two hours of debugging.

Programmers needing wingmen that clean up after them are in my opinion simply jerks. It's a sign of disrespect towards their coworkers and a sign of a lack of an important skill.

<comment><USER14> This is simply not true.

I have met a few and know of a few other great programmers - the ones who do the work of 5-10 lesser programmers - who exactly fit this description (and some that don't). Either way, if you have one of these guys you shouldn't mind having to pay for a minder.

Guys like this are common in the games industry, but I've met a few working in other fields.

I have found that these programmers tend to be idolised and adored by the rest of the coders: good programmers tend to appreciate great craftsmanship. Plus, everyone ups their game in the hope that some of the magic will rub off. It's also easy to take a few clever risks if you have one of these guys standing behind you.

<comment><USER15> I disagree with -you-, sometimes even coders can buy into hype. If you play up someone's ego and idolize them, they'll just continue to do things like not document their code or - as wulzcer put it [save an extra two lines but cost the next person two hours of debugging]. Never thought I'd be the guy talking like this, but rockstar attitude does little positive for the team.

Kinda funny that Yelp's on this list; I see their office everyday as the elevator passes by on the way to mine, -and- they've one of the worst apis ever. haha</comment></comment></comment></comment>


JSON-LD and Why I Hate the Semantic Web - <AUTHOR> http://manu.sporny.org/2014/json-ld-origins-2/ <comment><USER3> Would you be so kind as to add (2014) to the end of the title? Since the post starts off by saying JSON-LD was made official "last week", it could mislead readers who don't notice the date in a small font between the title and the body.

<comment><USER4> I'm glad you pointed this out; without this, I'd spent the entire article thinking "how long did it take you to agree on this!?!"

</comment></comment><comment><USER5> This is a great essay.

I love so many of the quotes:

 _[the RDF Working groups] continue[s] the narrative that the Semantic Web community creates esoteric solutions to non-problems._

 _When you chair standards groups that kick out "Semantic Web" standards, but even your company can't stomach the technologies involved, something is wrong. That's why my personal approach with JSON-LD just happened to be burning most of the Semantic Web technology stack (TURTLE /SPARQL/Quad Stores) to the ground and starting over._

As someone who has actually built a non-trivial RDF/SPARQL/Quad Store based app (and would love to avoid having to do that again..) I've avoided JSON-LD because of it's association with the semantic web. Maybe I should reconsider.

I'll add another quote for good measure:

"The semantic web is the future of the internet and always will be." \- Peter Norvig.

<comment><USER6> Uh, oh: "It was initially developed by the JSON for Linking Data Community Group before being transferred to the RDF Working Group for review, improvement, and standardization."

[https://en.wikipedia.org/wiki/JSON-LD](https://en.wikipedia.org/wiki/JSON-LD)

<comment><USER7> Right, that's what TFA is about.

</comment></comment></comment><comment><USER8> "let's create a graph data model that looks and feels like JSON". This was à stupid idea.

N3 is, and has always been, the only readable (and human-editable) serialization format for graphs.

N3.parse() can recreate an in-memory graph from it, and provides an API to find a node by id, or all nodes of a given type. (So your entry points to the graph are your decision, not materialized once and for all by fixed root nodes, like in JSON)

From there, you travel the graph just as you would after a JSON.parse(). I.e people.class.teacher.name. And that's it.

(Think of N3 as a set of JSONs being able to have, in them, references to each other's. And N3.parse() as its API.).

More philosophically, JSON-LD made the same mistake as RDF/XML. It chose the trending data exchange, and bastardized N3 to fit into it.

But N3 is indeed a superset of both JSON or XML (or whatever tree-oriented data exchange structure).

I will also add that N3.stringify() is quite easy to implement.

So imho, we should promote N3 and its API.

<comment><USER9> Just gonna mention that N3 stands for Notation3 [0]. I'd never heard of it before, and just googling for N3 doesn't lead to any direct results.

My immediate reaction from reading about N3 is that it doesn't seem very easily approachable, especially when compared to JSON. If I type "json" on Google, the first result [1] is a fairly human-friendly spec with a huge list of implementations at the bottom. If I then type "json example" on Google, the first result takes me to a page with lots of examples [2] of JSON side-by-side with XML. In comparison, looking up Notation3 takes me to a w3 spec page for which my first reaction is to say "tl;dr", and looking up examples takes me to two pages [3] [4] which fail to immediately clarify anything.

[0] [https://www.w3.org/TeamSubmission/n3/](https://www.w3.org/TeamSubmission/n3/)

[1] [http://www.json.org](http://www.json.org)

[2] [http://www.json.org/example.html](http://www.json.org/example.html)

[3] [https://www.w3.org/2000/10/swap/Examples.html](https://www.w3.org/2000/10/swap/Examples.html)

[4] [https://www.w3.org/2000/10/swap/Primer.html](https://www.w3.org/2000/10/swap/Primer.html)

<comment><USER8> N3 in a nutshell is:

\</comment></comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-----

1) an object has an id and some types. Both are prepended with a ':'

+

an object definition ends with a '.'

For example:

:teacher1 a :Teacher.

2) an object has property values. Each property name is prepended with a ':'. A property value of type string is surrounded with '"""'. A property value of type integer is as-is. Several values for the same property are separated by ','. Properties are separated by ";"

For example:

:teacher1 :firstNames """John""","""Michael""";

              :lastName """Doe""".

3) Objects properties are properties whose value is another object. Such an object property value is simply the id of the referenced object.

For example:

:teacher1 :studiedAt :Yale, :Stanford, :Miskatonic.

4) Your object definitions may be split into multiple parts.

For example:

:teacher1 a :Teacher.

:teacher1 :firstNames """John""","""Michael""";

              :lastName """Doe""".

:teacher1 :studiedAt :Yale, :Stanford, :Miskatonic.

:Miskatonic a :University.

:Miskatonic :locatedIn :Arkham;

                :name """Miskatonic University""".

:Arkham a :City.

:Arkham :famousTeacher :teacher1.

\</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-----

Nothing especially difficult, in my humble opinion.

The great benefit of N3 (and the Semantic Web in general) is that the object definitions can come from separate datasets and be merged into a single graph, because all UUIDs are aligned in the Semantic Web.

<comment><USER10> The triple double quotes are horrible.

<comment> apk-d Oh god, my eyes are completely refusing to count these

<comment><USER8> This is absolutely optional. You can use " instead. You then need to escape the " as you would in JSON.

</comment></comment></comment></comment><comment><USER11> Does anyone on HN use JSON-LD? I hadn't even heard of it before. It looks it's useful in SEO ([https://developers.google.com/search/docs/guides/intro- struc...](https://developers.google.com/search/docs/guides/intro-structured- data)) but that's about it?

<comment><USER12> I spent some time attempting to work with the W3C Web Annotation Data Model. That data model is serialized as JSON-LD.

After spending about 50 hours reading the documents and attempting to implement some of it, I have a general idea what JSON-LD is.

I wasn't really trying to achieve anything, so I basically quit once something seemed opaque enough I couldn't figure it out in a short period of time. When I visited the JSON-LD Test Suite page to see what implementations are expected to do [0], I found:

> Tests are defined into _compact_ , _expand_ , _flatten_ , _frame_ , > _normalize_ , and _rdf_ sections

I had a hard time figuring out what each of these verbs meant, and they were about all that the various implementations I found did. For example, the term _normalize_ doesn't even appear in the JSON-LD 1.0 specification [1]. _shrug_ I'm sure I could have figured out more if I spent the time to actually read the whole thing and all the related documents.

[0]: [https://json-ld.org/test-suite/](https://json-ld.org/test-suite/)

[1]: [https://www.w3.org/TR/json-ld](https://www.w3.org/TR/json-ld)

<comment><USER13> JSON-LD is RDF. Or rather is what RDF would look like if it was serialized in JSON instead of XML. If you look from the Semantic Web angle JSON-LD is just a serialization format, like e.g. Turtle, but using JSON as JSON is popular nowadays.

Sometimes I wonder why this is not said directly, probably because Semantic Web and RDF are passe now.

Actually the post's author addresses this point:

> I made it a point to not mention RDF at all in the JSON-LD 1.0 specification > because you didn't need to go off and read about it to understand what was > going on in JSON-LD.

...

> Tests are defined into compact, expand, flatten, frame, normalize, and rdf > sections

These are just sub-formats of JSON-LD, information represented is the same but JSON looks a little bit different. Some sub-formats are easier for tools to process, some are better for humans.

<comment><USER14> > Sometimes I wonder why this is not said directly, probably because Semantic > Web and RDF are passe now.

It seems to me that on one hand JSON-LD wanted to bootstrap the network effects by bringing along people who were doing RDF both technically (the JSON-LD spec says "JSON-LD is a concrete RDF syntax as described in [RDF11-CONCEPTS].") and socially (published by the RDF WG), but on the other hand the negative brand equity of RDF is recognized as an obstacle for bringing along even more people, hence the OP professing "Hate the Semantic Web" and "Kick RDF in the Nuts".

It's kinda weird how mentioning the RDF connection of JSON-LD in the sense of past experiences with RDF having any bearing on JSON-LD is treated as a social no-no. Despite the above-quoted bit from the spec saying "JSON-LD is a concrete RDF syntax as described in [RDF11-CONCEPTS].", we are supposed to play along with JSON-LD totally having nothing to do with RDF.

</comment></comment></comment></comment><comment><USER15> > Reading sections of the specification that have undergone feedback from more > nitpicky readers still make me cringe because ease of understanding has been > sacrificed at the alter of pedantic technical accuracy. However, I don't > feel embarrassed to point web developers to a section of the specification > when they ask for an introduction to a particular feature of JSON-LD. There > are not many specifications where you can do that.

Seeing as how there are many opportunities to provide documentation for beginners and only one place to provide authoritative answers to pedantic technical questions, I feel that the author has misplaced priorities.

<comment><AUTHOR> Indeed: approachable and readable are good, but not at the cost of delivering resolution for knotty ambiguities, as Algol found in its day...

</comment></comment><comment><USER16> hope graphql would provide some standard for defining schemas with schema.org vocabulary...

graphql can be designed to incorporate most of json-ld specs (and hydra too)...

Then everyone can benefit because it's machine-friendly-annotated data everywhere :)

<comment><USER17> A similar thought crossed my mind too. I've never used JSON-LD. I'm not quite sure where I would use it. One of the ideas was what you said.

The other idea I had is that it may help with transforming payloads from their serialized format into a static type system like TypeScript. It could be nice to have a system that can see an incoming response, validate the type using JSON-LD, and construct an instance of that object with it. It can be done without JSON-LD, but it may be useful.

<comment><USER16> ...or FB can create a 'sdk-code-generation' like they did with Thrift, along with typescript generation.

Also, your idea is possible with current Typescript 2.3's language-server specs :)

But, this is quite separate from 'generic-machine understandable' data - <USER2> is what json-ld is all about.

</comment></comment></comment><comment><USER8> A message from the (now defunct) XML community: "We've gotten to a point where a human-readable, human-editable text format for structured data has become a complex nightmare where somebody can safely say "As many threads on xml-dev have shown, text-based processing of XML is hazardous at best" and be perfectly valid in saying it. -- Tom Bradford"

<comment><USER18> I never used xml. can anyone who used it at a time when it was vogue give a brief overview of "what happened"? I'd love to read it, if you have the time (or point me toward a good summary).

<comment><USER8> Very basically, XML is a document format. Inherited from SGML. The point of the statement is to say that all the "clever tricks" that XML permits (entities, encoding, well-formedness, validation, ...) make it unsafe to manage by hand. (I.e by appending strings together to build an XML, or by tokenizing a XML input string). From there, you need tools and API to manage your XML representation. And mapping technologies to recreate objects in memory from an XML content. All these (over engineered) tools make things overly complex when you want to exchange documents. And a true nightmare when you exchange data structures.

The alternative of JSON and JSON.parse() is extremely lightweight in comparison. JSON is basically Javascript already. And you can create JSON from any in-memory data structure, with any programming language.

Today, XML should be used only to exchange structured documents. (Which was its primary goal, btw ;)

</comment></comment></comment><comment><USER19> Linking to a video for a basic introduction of the concept will not persuade anyone.

No triples for the semantic web is a joke, right? Facts are stored in context, not as pure facts. If this then this is that. Subject -predicate - object. William eats apples. Not William apples.

Why should I give up N3 or it's bloated xmlfied webtransports?

</comment><comment><USER20> Everytime I feel compelled to serialize data with relationship information, all I have to do is look at the extra file size -- with all the namespaces and trivial definitions -- and I immediately trash the idea.

I do like separate data files and schema files, though I haven't seen them pop up in a while.

</comment><comment><USER21> I'm experimenting something using "noise" the new database from Damien Katz (CouchDB). I can feed JSON-LD document and query them. Very useful for microservices because each services only need to know one part of the overall schema/data model</comment>


Show HN: Nymeria – Find LinkedIn and GitHub User Emails - <AUTHOR> https://www.nymeria.io <comment><USER2> No clue about LinkedIn as I don't use or like the platform, but mails aren't really hidden on GH. Most people display one on their profiles (or in their commits). I do the first, and recruiters still spam different addresses of mine as well. Why make this any easier?

<comment><USER3> I personally find it useful for more than recruiting, such as sales etc. Shaving a few minutes off finding an email compounded over a day can save quite a bit of time allowing you to focus on more important things.

</comment></comment><comment><USER4> We've seen a ton of these, even 2 that I can think of on HN in the last few years. How is yours different and why is it better?

<comment><AUTHOR> That's a good point-- I don't think we do a good job expressing what we do different on our landing page. I believe our core difference is our data quality.

A lot of these products will try permutations or combinations of the user's name and use a few methods to determine if those emails are taken and they "assume" that email belongs to the user.

Nymeria doesn't assume or guess. We have over 200 million email addresses tied directly to users, they are not a guesses.

</comment></comment><comment><AUTHOR> Hello HN! We're happy to share Nymeria with everyone and looking for any and all feedback. We are currently focused on finding and surfacing the best emails for LinkedIn and GitHub users and hope others find Nymeria as useful as we have!

<comment><USER5> Do you have an api?

<comment><AUTHOR> We do but it's not open to the public at this time. If you or anyone has any interest in using our service programmatically, please submit a feedback message on [https://www.nymeria.io](https://www.nymeria.io) (at the bottom of the page) and we would love to keep you posted and get some feedback regarding your needs/use case, etc.

</comment></comment></comment><comment><USER6> Open Source?

<comment><AUTHOR> We're not open source at this time but if there's a large demand we may consider open sourcing part of the product (such as the extension's code).</comment></comment>


Discovery in the Data Lab - <AUTHOR> http://www.thoughtworks.com/insights/blog/discovery-data-lab-part-1

<comment><USER2> I think this is the way forward and to take it a step further, iterative exploratory data mining/analysis is the way to go(according to me).

There is a lot of value in getting a list of all the data you can gather, having the business people explain it to the techies, putting your heads together and coming up with ad-hoc queries and data cuts that provide any insight. There is a disconnect between what data can be gathered which when combined with existing metrics leads to a-ha moments.

Targeting works but in very complex/unexplored business ecosystems it might be better to go rogue to get "quick wins".</comment>


"Trouble Paying Your Malware Ransom? Crooks Launch 'Customer Service' Site" - <AUTHOR> http://www.dailyfinance.com/2013/11/14/trouble-paying-your-malware-ransom-crooks-launch-customer-serv/

<comment><AUTHOR> ""These guys have some big cojones," said security expert Brian Krebs, who writes the KrebsOnSecurity blog."</comment>


Ask HN: We built a rock-solid, easy-to-use CMS. Now what? - <AUTHOR>

background: 14-person marketing/webdev studio. We built a rock-solid, easy-to-use, easy-to-implement, extensible CMS.
We've entertained thoughts of releasing as a product to the over-crowded CMS market, mainly because we've had some rave reviews converting a few Joomla and Drupal sites to it; not to mention the positive response on new sites from ground up. Currently running behind about 120 sites.
It is proprietary now, but the door isn't closed on open-sourcing it down the road. While proprietary, the data formats are open and presentation is well separated from the system (making the move away from our product easy if a client wanted to go that direction). Clients are always shocked when we tell them "look, if you want to go in a different direction in the future, here is the database, here is your data in the database, here are functions to export to many standard formats."
Would like some ideas/thoughts on: -stress testing -security audit resources & methodology. -experience with launching a CMS product. -general advice (we are ad/marketing folks first and foremost, but have strong tech knowledge on staff).
thanks. <comment><USER2> OK I have a Joomla site I manage, what's my incentive to switch? What are your uniques?

Presumably I have to host with you, what are your uptime guarantees, what are your charges?

I'm interested that you spent time to build from scratch rather than adapting a current FOSS offering; presumably you had a plan but think it's not going to work?

</comment><comment><USER3> I think you'll have an easier time making it in this space if you're open- source from the get-go. A CMS can be customized a thousand ways, and even if you think your CMS is the greatest CMS ever, the variety of needs is just too great for a closed product to work well.

<comment><USER2> I'm a big lover of FOSS but I'm not sure really. There is a wide variety of needs but I wonder how many plugins the average Wordpress user really uses. Presumably they're not imagining they'll take the entire market just a segment, perhaps the click-to-edit|edit-in-place part?</comment></comment>


A walk down memory lane - <AUTHOR> https://blog.trailofbits.com/2017/04/14/a-walk-down-memory-lane/ <comment><USER2> Intel's HTM and CET are both very exciting developments.

Now that both clang and Visual Studio have mainlined control flow integrity, it can be made fast using hardware.

It looks like CET matches the Microsoft implementation of CFI more (according to [1] they worked together on the feature), I'm sure it'd be useful for clang as well.

[1]. [https://software.intel.com/en-us/blogs/2016/06/09/intel- rele...](https://software.intel.com/en-us/blogs/2016/06/09/intel-release-new- technology-specifications-protect-rop-attacks)

</comment><comment><USER3> The article first describes context and then it goes into describing the idea:

> We can begin a (hardware) transaction just before a function return > instruction, and end the transaction at its intended destination.

Interesting indeed!</comment>


The Jocks of Computer Code Do It for the Job Offers - <AUTHOR> http://www.bloomberg.com/news/features/2015-09-25/the-jocks-of-computer-code-do-it-for-the-job-offers <comment><USER2> They don't do it for the job offers :-) They do it because it's a challenge. An amazing mind-bending challenge. Just a chance to compete with some of the smartest people in the trade, stays with you for life.

At [http://InterviewKickstart.com](http://InterviewKickstart.com), we sometimes borrow problems from these competitions. They are hard as hell.</comment>


The ability to send a plain text email is not a skill people care about (mostly) - <AUTHOR> https://ypsidanger.com/17819/the-ability-to-send-a-plain-text-email-is-not-a-skill-people-care-about-mostly <comment><USER2> How about being able to transmit data undistorted from A to B?

I mean, it's not about emails must be ugly or must be read in white-on-black 80x25 terminals, it's about them not being distorted/broken on delivery.

If you can't manage that, then you should think about how this portrays you as a submitter. Doesn't matter if you zip, if you post diff on https: somewhere, if you uuencode or mime64, but not being able to choose tools for yourself that do NOT distort what you send is quite a powerful signal.

Ask yourself, if your ZFS-with-checksums or your VPN with authenticated headers or your file integrity checking software says "this incoming data is distorted", do you really imply that the first reaction is to turn off checksums and just eat the data? Is this the "missing generation" projects would lose?

I think I would like to be able to run OSes and code written by people that defaults to not turning checksums off on first indication of errors.</comment>


Show HN: The Wifi Block – Let your guests connect to WiFi with just a tap - <AUTHOR> https://thewifiblock.com <comment><USER2> Cool product! I wouldn't worry about the HN naysayers too much (very "just use rsync to a VPS"-esque vibe here). I think you should clarify on your site that the app is only required for setting up the block, and that your guests won't need it -- I knew that from using the NFC wifi feature before, but not everyone does, and right now centering the app makes it seem like everyone will need it. You could also maybe make a business-centric landing page? I think this would go over GREAT with coffee shops etc. Especially if you have the option to get a logo image engraved instead of just text. Not sure how possible that is with your current setup, though -- I know laser cutters can do an image, but it needs to be SVG or another vector format I think? Maybe you could use the Inkscape auto-vectorizer to do that conversion for raster images, though (it's usable from a script IIRC).

Cool business! Good luck!

<comment><AUTHOR> Thank you so much for the kind words and support! These are all great points that you brought up! We'll be adding a new feature shortly that will allow companies to upload logos and we will (albeit manually like you mentioned) convert them to vectors.

I can't thank you enough for the positive/constructive feedback. It's really hard creating something new and staying positive with all the naysayers!

</comment></comment><comment><USER3> Instead of explaining the tech and how it works, the site is just asking me to pick one of the wood species...

<comment> 0-_-0 They don't want you to know it can be done with a $1 NFC sticker

<comment><USER4> Is it still $1? I thought the price had dropped by now.

</comment></comment></comment><comment><USER5> I bought a pack of dozen NFC stickers for $5. Slapped them underneath drink coasters. They work well.

<comment><USER4> Yeah, and if you didn't want to do a coaster, you could easily make your own, or put it behind a picture in a frame.

</comment></comment><comment><USER6> So it's a $40 piece of wood with a NFC sticker in it? Feels like it would be cheaper to just print out a QR code and get people to point their camera at it to connect. Could even order a super cheap NFC sticker and stick it to the back of the QR code.

<comment><AUTHOR> Hi there! At a basic level yes you are absolutely right. The wood however has to be rough cut, assembled with the NFC tag, precision cut, routed multiple times, sanded, laser engraved, and then have multiple coats of acrylic sealant applied to it. Not bad for only $40?

We hope that others will find a custom designed Wifi Block sitting on their shelf a lot more appealing than a printed QR code with a sticker on it, but only time will tell!

<comment><USER6> I mean, don't get me wrong, I'm sure it's a quality product that you provide (I'm assuming you're affiliated with this). I just don't remember the last time I had to give anyone access to my WiFi (everyone's just on mobile these days), and when it has been required it's usually for laptops (which couldn't use this.. Nor a QR code for that matter)

Maybe other people would find better use for this, but for the past years I've just set my WiFi password to something I remember and in the rare cases people want to connect, I just tell them the password.

The WiFi block looks nice though!

<comment><AUTHOR> Thanks!!!

The most cases we find that the average people run into issues with mobile is in bad connection areas or when staying at one place for a while (staying over with friends or family, or at a party, etc).

A big use case as well is airbnb's and home rentals. One of the first things that you want when entering a rental is free wifi!

Thanks again for the feedback!

<comment><USER7> Yeah I'd love if airbnbs had these. I tend to rent places in mountainy areas with bad cell service. It feels like 90% of the time we arrive bleary-eyed from a long drive, needing to look up a place to get dinner, only to find the welcome packet which has a handwritten password like "FJ#)@Jkfsf2JBbnNVnIOfQPOWre230F(&J%^". Minor annoyance, but a bother all the same. I always type it out in the Notes app first to make it easier to fix typos.

<comment><USER8> I've rented many an Airbnb where that long password is scratched out and it looks like a previous guest has written in "torpedo" or something much easier to type.

I guess the upside of default router passwords is that it allows friendly "hackers" to help.

<comment><USER9> Friendly hackers should know better than to leave a trivially crackable passphrase for an easily captured network.

<comment><USER8> It's a cabin in the woods with free WiFi. The risk of someone cracking that is lower than the risk of someone breaking in and reading the password on the fridge.

<comment><USER9> Missed that, good call!

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> It it's anything like the Wifi Porter ([https://tenonedesign.com/porter](https://tenonedesign.com/porter)) i purchased a few years ago, then it's a somewhat decorative way of getting guests online.

I have a couple of them, one for guests, one for the kids network, and they're in use almost daily. Still need a couple for my vacation house, so maybe this will fit :)

</comment><comment><USER11> Interesting! You're using NFC to pass over the WiFi keys etc? How is it that you're negotiating and getting the NFC to trigger the WiFi password input?

</comment><comment><USER12> A very confusing choice of name, I assumed at first reading that it was 'block' as in the verb, to prevent guests from connecting to WiFi.

</comment><comment> m-p-3 I did my own cheaply-made "WiFi Block" for my guest network with an old CD jewel case, a printed piece of paper with a WiFi symbol, the SSID name and a QR code specially formatted to create a connection, as well as a small NFC sticker under that piece of paper programmed with the same information.

So far it works well, and makes a nice conversation piece with new guests :)

</comment><comment><USER13> Tapping phone seems awkward. You can just scan a barcode and most phones have support for that whereas NFC doesn't seem as widely supported?

</comment><comment><USER14> What does "widely supported" actually mean? What an odd thing to write on a tech product page.

<comment><AUTHOR> Thank you for the feedback! Widely supported is clarified more on the footer of that section, and also in the FAQ. We'll take a look at making it more explicit though, I appreciate you bringing it to our attention. While being a technology product, our main customer focus is not to technical people, and therefore need to strike a balance between too heavy technical terms and details and getting our value proposition across.

iPhone's from iPhone 7 and up are supported in setting up the Wifi block, and iPhone X's and above support the guest functionality of tapping to connect to Wifi.

Most Android devices created from 2018 and after are supported. A good way to know if your device would be supported or not is whether or not you use Android or Apple pay.

Thanks again for taking a look and your feedback!

</comment></comment><comment><USER15> This is very cool.

Combining tech, with oldie wood, with I assume tech to cut it.

Need more of this in the world.

I hope it does well for you.

<comment><USER16> Wood's cool factor is underrated.

I worked with a salesman in Sweden. We sold very expensive mainframe software. One of his things was, when someone signed up, to present them their copies of the contracts in a beautiful slimline rosewood briefcase that the customer got to keep. So beautiful it made your eyes water to look at it.

Of course he brought one to meetings so the customer could form a longing for it. It seemed like he may have buffed it with furniture wax as well, perhaps there was an olfactory element at work too.

Without doubt this object of desire moved the needle significantly in getting people over the line on a sale, they wanted the wooden briefcase so badly. He was extremely successful.

</comment></comment><comment><USER17> > device must have nfc capability and be connected to the desired wifi for > programming

How does that work? Does the user have to open the Wifi settings page on their phone, tap on the correct SSID, and then tap their phone on this NFC device?

</comment><comment><USER18> I am more curious about the technical aspect.

I could not find any android documentation on building wifi nfc tags that are automatically connected to by the system.

Can someone explain how this is working? Hidden apis? A NFC spec, or something else?

<comment><USER19> [https://developer.android.com/reference/android/provider/Set...](https://developer.android.com/reference/android/provider/Settings#ACTION_PROCESS_WIFI_EASY_CONNECT_URI)

[https://source.android.com/devices/tech/connect/wifi-easy- co...](https://source.android.com/devices/tech/connect/wifi-easy-connect)

</comment></comment><comment><USER20> Why not just use the WPS WiFi button ? most internet routers have it nowadays.

<comment><AUTHOR> Absolutely an option! Unfortunately for a lot of people the router is hidden away. For those renting their house on airbnb or similar, the last thing you want your guest to have to do is hunt for the router. We hope having a customized Wifi block next to your entrance would make the experience awesome!

</comment></comment><comment><USER21> Pardon my ignorance but how would this work if you're trying to connect your laptop or a non-phone device (Chromebook, Kindle tablet, etc.).

Is this for only connecting NFC-enabled smartphones?

</comment><comment><USER22> Should definitely also engrave the name + password or at least a QR-code.

I had an NFC sticker in my kitchen and for many it didn't work. QR worked much better.

<comment><USER9> I take it you don't roll passwords very often.

</comment></comment><comment><USER23> This is for largely android Users right?

If you're at my house but not in my or my wife's contacts (and thus it can't request access to our wifi automatically) I doubt I want you to have wifi access anyway.

<comment><USER24> It's mostly for retail businesses that would otherwise write Wi-Fi passwords on signs.

</comment></comment><comment><USER25> Reaching out about a bulk purchase</comment>


Toro - a php micro-router with great examples - <AUTHOR> https://github.com/anandkunal/ToroPHP

<comment><USER2> How is this not just a slower .htaccess implementation with OOP boilerplate? The instructions even mention editing .htaccess, so it's not like this is necessarily intended for people who don't have control of it.

RewriteRule ^foo/([0-9]+)/bar /foo/bar.php?x=$1 [L,NC,QSA]

Done.

These things come across as monkey-see-monkey-do. Other frameworks in other languages have routers, therefore they must also make sense in PHP.

<comment><USER3> There's always the argument of abstraction vs simplicity. I appreciate both and I didn't used to like using routers. But I do use it these days for most of my work.

Apps often don't have a physical URL that you could map to in .htaccess like /foo/bar.php. There's only index.php and the appropriate controller/method is executed based on the URL. Of course you could just map .htaccess to something like /index.php?method=foobar instead. But then you're still dealing with a router in your index.php, perhaps a simple switch statement or something. It wouldn't bother me to see this kind of setup but I think having a router is just a bit cleaner.

You can also abstract retrieving values from the URL like /account/1234 (obtaining "1234") so that the router does all the parsing and the controller isn't aware of the URL implementation. Perhaps useful for altering URLs later without affecting the controller code. Keeping things separate also can make unit testing somewhat easier as you can substitute the router with a mock object and get your controller to respond to all the variations of user input.

<comment><USER4> > There's always the argument of abstraction vs simplicity.

This is a false dichotomy. A good abstraction makes things simpler.

<comment><USER3> You're talking about abstraction in general and I'm talking about a specific implementation.

</comment></comment></comment></comment><comment><USER5> Well done! This has a really clean interface, I wish I'd come across it when looking for a simple router a few weeks ago. A lot of the other ones lean heavily towards a style associated with their related framework, or are too esoteric/basic.

There are a few things I would have to add before I would use it however, and I hope they make it in some day:

1) You should add a whitelist for the HTTP request method names, i.e only allow calls to get(), post(), not some_suspicious_call_from_bad_user(). People will often put non HTTP methods in their views (view as in django sense) and you don't want them to be able to be called by a malicious user.

2) You should make it easy for the developer to configure their own xhr headers.

3) Nitpick: You should probably use 405 (Method Not Allowed) instead of 404 for when a method handler isn't found.

Maybe I'll use it in this project, in which case you may have a few pull requests headed your way!

<comment><AUTHOR> Wow fantastic code review! I'm a minor contributor on this project and those changes sound great.

</comment></comment><comment><USER6> Related: A similar project (a simple php router) called Klein exists (<https://github.com/chriso/klein.php>) which is really great. Does anyone have experience with both and can explain which is better?

<comment><USER7> I love Klein, but this looks WAY easier to work with and much more specific. Klein includes a bunch of stuff for request and response handling, output buffers and views and stuff. Toro appears to completely leave all that to the implementer, which is very nice if you've already got code to handle those things.

</comment></comment><comment><USER8> Reminds me of many things; as usual, the weakest part of this PHP router is the .htaccess file.

<comment><USER9> I don't think you can do this kind of url routing in php without modifying the .htaccess file.

<comment><USER10> And so it's permanently married to Apache. Too bad.. is there anything like this that'll run on nginx/lighttpd?

<comment><USER11> All of these routers work under Nginx or Lighttpd, they just need a different config file. Here's one that is often used under Nginx:

        location {
            root   /usr/share/nginx/html;
            index  index.php index.html index.htm;
            try_files $uri $uri/ /index.php?$request_uri;
        }

</comment></comment></comment></comment><comment><USER12> I've used Toro for about six months. It's excellent.

<comment><AUTHOR> Yeah me too. It's been a great tool for me as well.

</comment></comment><comment><USER13> Simple, elegant solution to a typical problem where everybody else ends up building a broken wheel.

<comment><USER14> Agreed. This may have replaced Sinatra for my go-to for building quickie Rest APIs

<comment><USER15> have you tried SlimPHP? I've been using it for APIs lately and its been great. Very easy to get up and going very quickly.

</comment></comment></comment><comment><USER16> Looks similar to Fat Free Framework for PHP, which I've been using for a few months. <http://bcosca.github.com/fatfree/>

</comment><comment><USER17> Like everybody else, I wrote my own router which somehow began to grow and became a so-called microframework: <http://azuki.desfrenes.com/>

This is probably what I would use for PHP, but obviously other languages have better solutions like ruby/sinatra, python/flask etc.

</comment><comment><AUTHOR> The toro mascot on the main site is pretty cool. <http://toroweb.org/>

</comment><comment><USER18> It's an interesting approach. I use SlimPHP, which approaches the RESTful API problem as a DSL, much like Sinatra. Slim has a few nice features, and my new preferred PHP stack is Slim Framework + Zend Framework as a library.

</comment><comment><USER19> How can I bypass images or specific files using ToroPhp? I usually add this lines at my _.htaccess_ :

      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d

<comment><USER20> You do just that. When setting your .htaccess to route all URLs through Toro, use a snippet like:

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php

</comment></comment><comment><USER21> I used Moor for several projects and works like charms and it's very easy to use ( <https://github.com/jeffturcotte/moor> )

</comment><comment><USER20> Similar to GluePHP: <http://gluephp.com/documentation.html>

</comment><comment><USER22> This illustrates exactly why PHP projects often become such an unmaintainable mess and security hole. This looks like an example collection of PHP worst practices.

I mean, what could possibly go wrong with untestable code and unfiltered input...?

<comment><AUTHOR> Not sure how adding some input filtering and tests would make this an unmaintainable mess..?

The code is actually pretty tight and is optimized for empowering a developer rather than inflating the bumpers of your bowling lane.

</comment></comment><comment><USER23> i wish zend framework's router was this easy

</comment><comment><USER24> Looks clean. Way to ship!

</comment><comment><USER25> i love it

</comment><comment><USER26> Is this a parody of how not to do things? I was prepared to take it on face value of being rather misguided, but thinking about it... It's a glorified mess of goto statements and objects being misused.

I confess that I stopped digging further after I saw files being included in methods, absolutely one of the biggest sins in PHP:

[https://github.com/anandkunal/ToroPHP/blob/master/examples/b...](https://github.com/anandkunal/ToroPHP/blob/master/examples/blog/handlers/article_handler.php)

[https://github.com/anandkunal/ToroPHP/blob/master/examples/b...](https://github.com/anandkunal/ToroPHP/blob/master/examples/blog/handlers/articles_handler.php)

<comment><USER27> Not that I've looked at it in much depth, but those just look like simplistic examples to show how the routing works. If it's just a router, then how you render views is beyond the scope of the library, and cutting corners in examples for the sake of expediency doesn't seem so bad.

<comment><USER26> _Not that I've looked at it in much depth, but those just look like simplistic examples to show how the routing works. If it's just a router, then how you render views is beyond the scope of the library, and cutting corners in examples for the sake of expediency doesn't seem so bad._

I'm fine with the idea of a router simply being a router; I really take exception to yet more PHP examples illustrating bad coding habits being on the web though.

<comment><USER27> I can agree with that. Even just changing it from

include("views/articles.php");

to

return view ('articles');

would be better...</comment></comment></comment></comment>


Show HN: A Genius Game in JavaScript - <AUTHOR> https://github.com/victorqribeiro/genius <comment><AUTHOR> Hi everyone. I've been really busy lately with the new job and the new city and the new place. But, I took this time to make this little game. The idea came from a conversation at work. I've took the time to put all sorts of visual aids and feedback. Hope you like it.</comment>


As Discord nears 100M users, safety concerns are heard - <AUTHOR> https://www.polygon.com/2017/12/7/16739644/discord-100-million-users-safety <comment><USER2> IMO its origins in the gaming community, and all the moderation features that grew out of it, make Discord a much better fit for open source communities than Slack. For example:

\- Individuals can block and report other users

\- There are tiered mod levels

\- Per-community pseudonyms, but a single account makes it easier to track bad actors

Markdown support, including syntax highlighting, is actually better in Discord than Slack already, too.

If you haven't checked out an OSS community on Discord yet here are a few:

\- [https://www.reactiflux.com/](https://www.reactiflux.com/)

\- [https://chat.vuejs.org](https://chat.vuejs.org)

\- [https://discord.gg/reasonml](https://discord.gg/reasonml)

<comment><USER3> >\- Individuals can block and report other users

As far as I know, Slack won't implement that because it's a team chat app and if team members need to block people, there's larger problems: [https://mobile.twitter.com/stewart/status/624239660529684481](https://mobile.twitter.com/stewart/status/624239660529684481)

<comment><USER4> In other words, Slack merely _tolerates_ public Slack chats, it doesn't want to encourage them.

As we speak, I have five slack communities open in my messenger. All but one of them are open to the public.

I'd wager there are more public Slack communities than there are private (i.e. "team chat") ones. But much like Twitter, Slack has a fundamentally different vision for their platform than their users apparently have.

To me this was first made clear when Reactiflux (a massive community around React, Flux and related web technologies and topics) had to switch from Slack to Discord because they had hit a hard limit of members and Slack said they wouldn't increase it because their software and infra wasn't build to handle these scenarios.

Nevertheless open source projects and community builders keep flocking to Slack and Slack doesn't seem to have any intention to clear up this misalignment. They're benefiting from the free advertisement small public communities create but don't want to spend any extra energy providing their services to them as they grow.

<comment><USER5> We didn't hit a hard limit. Slack explicitly disabled new user signups for us because they thought we were getting too big.

<comment><USER4> Ah, I didn't know that. Only reinforces my point about Slack not being a good choice for community platforms though.

</comment></comment></comment></comment></comment><comment><USER6> One thing discord fails at accomplishing is voice activation in their web browser client. If anyone from the company is reading I will gladly write you a python/scipy program that will do the correct real-time DSP for voice activation if you implement it into your platform.

It's a window, an fft, a filter around a primary frequency range, an integration, and an N second timer since the last time the audio crosses the threshold.

Discord's current implementation drops in the _middle_ for words! It's crazy.

<comment><USER7> Is this only in our web client or also in our desktop client?

<comment><USER8> It definitely drops the last word for the cell phone app. I often talk using the desktop client to someone using the cell phone app, and every last word of a sentence she says seems dropped

<comment><USER7> Android, iOS? Do they use automatic detection or did they adjust the thresholds.

</comment></comment></comment></comment><comment><USER9> I my startup company our dev team is pread across paris, copenhagen, dubai and beirut. We with struggled using slack and skype for communication but have recently went for discord, it really boosts the morale and connects the offices in such a cool way. Always being able to talk in a voice channel is just amazing, and everything works incredibly smooth.

You can even video chat if you make a group call outside of your channel though

Would recommend for other small companies in same boat

<comment><USER10> Similarly, some time ago I ran a team of 9 through Ventrilo (TeamSpeak alternative) after we struggled with Skype and IRC. It worked great, but we missed text for historical reasons; to supplement text we whipped up another IRC channel.

Discord really hit it off with gamers giving them the chat application they want (such as Steam, Battle.NET; formally Xfire) with the VOIP they used in conjunction. It's really an amazing product (who says Electron doesn't work?!) — I'm hoping they can stay around for a long time.

<comment><USER11> I wouldn't really say their client _works_ in that sense considering how notorious it is for flunking out in completely random ways (i.e missing push- to-talk release events, suddenly deciding your speakers or mic don't exist, not lighting up people who are speaking, the UI randomly blanking out, etc). It's probably the worst of the bunch in terms of bugs other than maybe Skype. Not that anyone picks their chat/VoIP client based off that either way; we all happily used the 2011-era Steam client, and that was a legendary kind of awful.

Also, I can't be the only one who can single out Electron/CEF apps just from how bad the input delay is. It gives me the feeling of it being made of cheap plastic.

<comment><USER12> Just have to chime in with my own anecdote that I find discord to be mostly bug free and an excellent, easy to use piece of software.

<comment><USER11> I can definitely agree with it being easy to use at least. I'd figure that's the main reason it's as popular as it is (together with the feature set, of course).

Being able to click a link and simply join a channel without all the fudging it can take when using TeamSpeak or even IRC is great, not to mention how easy it makes setting up your own "server".

</comment></comment></comment></comment></comment><comment><USER13> Discord's come a long way on this stuff. About a year ago they started getting used by hate groups for organizing and I was worried the platform would get taken over by bad people. I don't know that they've solved all the social problems but at least they're making an honest effort.

<comment><USER14> It's used by all kinds of groups. Developers, gamers, but also left and right groups, etc.

I don't understand what the problem is if someone who supports something I don't like (be it alt-right, liberal, whatever) uses the platform, as long as he doesn't bother me personally :/

(My account was just banned by sctb for this ;P)

<comment><USER13> American Nazis were using it to organize the Charlottesville demonstration. That's not a form of legal liability nor brand identification you want. [https://www.engadget.com/2017/08/26/discord-chats-may- help-c...](https://www.engadget.com/2017/08/26/discord-chats-may-help- charlottesville-lawsuits/)

Also the bad people never stay confined to their private hate club. See the linked article here about "raids" on other channels or literally the entire history of Internet social media.

<comment><USER15> So it's every communication service's responsibility to keep only the people they like using their service?

<comment><USER16> There's a difference between "communication service", as in "carrier", and "social platform" as in "community".

When you run a carrier you're expected to be neutral. What people do with your service is not your responsibility. If the service is being used illegally then law enforcement can intervene.

When you run a community you have an obligation to pick and choose who participates. You can strive to be inclusive, but when you start to include those that seek to exclude you'll find your community being hijacked and perverted into someting that reflects the wants and needs of a tiny, dedicated, often highly motivated minority.

It's the responsibility of anyone running a community to police and weed out bad actors. I they don't the good citizens will leave and your community will be worthless. That's probably a bad thing if you've got shareholders to answer to.

<comment><USER17> Yeah but discord is no hackernews. If they start arbitrarily moderating views that don't align with flavor-of-the-month ideology or even nsfw content a lot of people will be pissed too.

What people talk about in Discord's independent chatrooms is their own business. I don't believe that most people advocating for strict ideological moderation on large platforms like facebook or discord understand the implications and dangers of allowing private companies such power.

Today they're booting off "neo-nazis", tomorrow they'll be booting off you.

<comment><USER18> "Today the teacher kicked my kid out of class for being loud and obnoxious, tomorrow they'll be kicking your kid out of the class too."

Please do us all a favor and look into what a slippery slope is.

<comment><USER19> truly there is no historical precedent for the abuse of power along ideological lines

<comment><USER18> Truly, modeling everything in life as montonically increasing functions because of exceptional historic precedences is a smart thing to do.

"There's a historical precedence for people drinking water and dying because of it, so I'm not going to drink water anymore."

The reasons you here about them is because they are so exceptional. People got banned from forums for being irreverent dicks before and no one batted an eye. Now because they got legitimized by gullible people, everyone screams about their lack of freedom on private platforms.

<comment><USER19> >People got banned from forums for being irreverent dicks before and no one batted an eye.

you're poorly versed in internet culture and history. many internet subcultures have axiomatically rejected moderation because, surprise, giving power to anonymous and unaccountable peers frequently results in abuses. you're confusing your own lack of concern and love of arbitrary authority with the opinions of others.

<comment><USER16> Managing a community is often a careful balance between handing over too much power to moderators who can abuse their powers and limiting moderators to the point where they're ineffective and the user base can't be controlled.

I've seen this dynamic play out first on tiny communities like MUDs where you'd have, at most, a thousand people. Later the pattern repeated over and over at larger and larger scales, where more recently you see entire platforms like Reddit suffering from the same issues. Each order of magnitude increase in user base makes the threats grow far more exponentially in scale.

Soon the whole internet will become rotten, culturally speaking.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER20> It's cool seeing an Elixir company have such explosive growth.

<comment><USER21> Elixir is part of their great performance! Their engineering blog is really interesting and full of neat information scaling Elixir (which is really hard to find since Elixir scales for a VERY long time).

<comment><USER11> Have we really regressed to the point where simply relaying data with reasonable performance is considered impressive? Figuring out _where_ to relay everything and keeping it all in sync is obviously hard, but that's a distributed systems problem, not (strictly) a performance problem.

We've been able to handle millions of concurrent HTTP(!) connections on a single machine for _years_ ; it feels like a pretty solved problem. Although, a lot of that involved userspace TCP stacks and really high-end networking hardware, so if you want to stay within saner territories you can scale that number back a bit.

<comment><USER22> Actually, I have to call this out as false - you can't handle millions of HTTP connections on a single machine, because there are only 65,535 available TCP ports. I think you meant that you can handle millions of HTTP connections on a few dozen machines...

Please try again, and stop spouting obviously false facts.

<comment><USER23> Ports are not used up by connections. One port can support 65K simultaneous connections from a single IP. If a thousand machines connect, each with their own IP, one port can handle 65 million connections. If you decide to accept HTTP requests on all ports, then _each port of your 65K ports_ supports millions of connections or more. Suddenly you're talking about a total of billions or trillions of connections all going to one machine. And that's still only using a thousand machines to connect. Open up to the entire internet and you can push that to quintillions of theoretically possible simultaneous connections.

</comment></comment></comment></comment></comment><comment><USER24> I started using Discord to game. Then pushed it out to some of my clients. It's great. Webhooks make it so I can replace Slack. Voice chat makes it so I can replace Slack / Skype. The ease of use, the voice channels... it's all so simple. Push to talk, who doesn't love that? Discord has been strong out the gate, much faster at getting features polished than any competitor I've seen.

</comment><comment><USER25> Discord is awesome! Very easy to use, easy to connect with other player in the clan and organize events and raids. Also easy to sneak in other clan rooms and negotiate switch and maybe even snoop a little.

I really like it a lot and I was always wondering why it is not used more in business setting or for coordination in teams, because it could totally do that and it is ligher solution then slack or god forbid hipchat.

<comment><USER26> Yeah honestly I don't see why it couldn't replace Slack, it is a very similar product but I feel like by marketing it primarily to gamers they are positioning themselves in a far less profitable market than Slack is.

<comment><USER27> > _Yeah honestly I don 't see why it couldn't replace Slack_

I see several reasons.

1\. It's impossible to not be in a public channel. Yes, you can mute it, but you can't ever leave it. In a large company with thousands of channels, this creates cognitive overhead.

2\. You can create private channels, but this requires the ability to assign permissions. This has two problems - one, if you have a lot of teams that need to have private rooms you're going to spend a lot of time juggling permissions, and two, if you need a quick ad-hoc room that you don't want littering the general list, you need to be able to assign permissions.

<comment><USER15> You can hide muted channels.. then you don't see them

<comment><USER27> How?

<comment><USER28> Under the options for the server, select "Hide muted channels".

</comment></comment></comment></comment></comment></comment><comment><USER29> > "It's time to ditch Skype and TeamSpeak"

Why is this still not a solved problem ? Why is there no free open source Skype alternatives !?

<comment><USER30> There is. Matrix, Mumble, IRC, jitsi ...

<comment><USER23> Being a Skype alternative requires persistent chat, audio, and video.

<comment><USER31> Matrix allows for all of these, by the way.

<comment><USER32> I haven't checked back in a while but last I saw, Matrix looked a lot like glorified IRC with extra stuff tacked on.

And I would also require that people could join over links with similar capabilities like Discord (require Account Age, registered with Telephone numbers, automatic joining into specific room, room visibility and access based on roles, prevent embedding of media based on roles, proxying of any previews in the chat via the server... etc)

<comment><USER30> I have a hard time using services that require your telephone number for no reason.

</comment></comment></comment></comment></comment></comment><comment><USER33> Discord Bot/Webhook API is really great[1].

You can use it to push alerts and charts from monitoring[2]. It's straightforward.

In Slack, a comparable integration requires a bit more footwork with file uploads being a separate part of the API.

[1]: [https://discordapp.com/developers/docs/resources/webhook](https://discordapp.com/developers/docs/resources/webhook)

[2]: [https://github.com/axibase/atsd/blob/master/rule- engine/noti...](https://github.com/axibase/atsd/blob/master/rule- engine/notifications/discord.md)

</comment><comment><USER34> It's interesting seeing a post about censorship in China on the front page with many concerned HN posters, while under it is a post about Discord gaining many users where none of the comments point out the most important thing:

Discord is proprietary software, meaning users have no practical capability, or legal right, to study, modify, or share the code, and it is a centralized service. Thus Discord can be used for censorship and surveillance at a moments notice, and the only power people have is to not use it. Such large software systems take a lot of time and effort to create. Network effects and motivated complacency make it unrealistic to simply wait until something bad happens before switching to a freedom respecting software.

Discord should be rejected outright simply for being proprietary, but software that is used for communications and forming communities have even stronger reasons not to be locked down and controlled by any one entity.

<comment><USER35> The front end is well document, so you can trivially implement a client.

<comment><USER36> Which doesn't matter if your are banned from the network. Changing clients or implementing alternate clients won't fix that.

</comment></comment></comment><comment><USER37> Am I the only one who finds Discord iOS unusable due to the small font which is not changeable? Also the font color is of low contrast whether you in its light or dark theme.

</comment><comment><USER38> I wonder how much Discord had to pay for this ad.

</comment><comment><USER39> It appears by "safety concerns" the author means "right wingers might be able to chat on the platform". I'm not sure Discord wants to put themselves in the position of weaponizing their platform to suppress particular kinds of private political speech.

<comment><USER40> Where are you getting "right wing" from? I saw this:

> "Raiding and spamming is explicitly against our Terms of Service and > Community Guidelines,"

<comment><USER41> Perhaps from this tidbit where the politics were explicitly mentioned in the article:

> _Resmini's statement comes just a few months after Discord took action > against a number of nefarious ALT-RIGHT servers. One of the largest servers, > Centipede Central, became heavily monitored by Discord administrators and in > the past few months, underwent its own implosion._

And more importantly:

> _"The team has confirmed that they are aware of Centipede Central and will > take action IF they find CC is in violation of their terms of service and > /or community guidelines"_

In other words, it sounds like the politics of that group alone was probably enough to justify keeping them under close surveillance. It wasn't necessarily just responding to "raiding and spamming" once it happened.

<comment><USER42> The problem is that large portions of the alt-right ideology goes outside of politics into racism, misogyny, and harassment and it makes sense to keep a community with those traits under close surveillance. My view on the alt right is that there is a line between reasonable political views and spreading prejudice against certain demographics and the alt right really walks that line (I haven't been on this discord but a good example is the r/the_donald subreddit).

<comment><USER43> The problem with the Alt-right on the internet is that they often are just trolls trying to be as offensive as possible.

The actual alt-right political movement is just a very small group. I don't think many outside of that small group actually hold the racist and misogynistic views that are expressed on these forums. It's often just backlash at the rapid change in culture. People want to break the new rules of discourse.

The bigger problem is genuine right wing views then get lumped in with the alt-right. Speakers like Ben Shapiro get called alt-right when their views are not racist or misogynistic. Before long people view many right wing views as hate speech. The more they do that the more people react by saying actually hateful things as a backlash. And so the divide grows.

<comment><USER44> >The problem with the Alt-right on the internet is that they often are just trolls trying to be as offensive as possible.

After watching and participating in this for years, I don't think this is true anymore.

The people who found it funny to piss off people by pretending to be Nazis ended up attracting actual Nazis and were eventually replaced by them.

It's much less funny to pretend to be a white supremacist when you know half the country actually agrees with you.

<comment><USER45> >It's much less funny to pretend to be a white supremacist when you know half the country actually agrees with you.

Half the country are white supremacists? I think you should walk outside and interact with some actual human beings.

<comment><USER44> I haven't been in the US for many years but would certainly expect to arrive at a different opinion when talking to actual people, however that is not the opinion that the elections reflect.

Either half the population are white supremacists or they're simply too stupid to not vote for white supremacists, which isn't any better than actually being one. It's not like all the people who supported Hitler literally wanted to kill millions of jews, still they supported it.

<comment><USER43> I think you'd have a hard time proving Trump is a white supremacists. I'm also sure most of his supporters are not either. This is the problem we keep demonising the other side. Instead we should endeavour to understand them. You don't convince people to agree with your ideas by calling them evil.</comment></comment></comment></comment></comment></comment></comment></comment></comment>


Show HN: How Ant Saved Dove - An Experimental Book - <AUTHOR> https://bubbl.in/cover/how-ant-saved-dove-by-craig-leat <comment><AUTHOR> A balanced approach to a child's learning includes reading, writing, listening and telling.

This experimental book includes activities across all four domains. Children are encouraged to learn new words, practice their writing, listen to the story, answer questions, make drawings and perform story plays. These activities can be recorded in the book using the camera and scratch pad.

Note: All content generated by the children is stored on the local device. No content ever leaves the device. To permanently delete all user content, delete the browser's data/cache.

</comment><comment><USER2> Maybe give the hacker news post a more descriptive title? I wasn't quite sure what it was until I clicked on it... :)</comment>


Developers shouldn't distribute their own software - <AUTHOR> https://drewdevault.com/2019/12/09/Developers-shouldnt-distribute.html <comment><USER2> "Some developers may complain that distros ship their software too slowly, but you shouldn't sweat it."

Our problem over at ardour.org isn't that they're too slow - it's that they don't get it right. Hence our own distro-neutral package, and our policy that this is the only version we can support.

<comment><USER3> Can you provide some insight on what distro's don't get right?

<comment><USER2> Sorry, this is a bit late.

To build Ardour "correctly" requires patches to some of the libraries we use. These patches will never be upstreamed, for a variety of reasons (the most notable: GTK+2 is EOL at this point; next most notable: the patch actually changes the behavior of the library in ways that that we need, but are debatable from a general purpose perspective).

By building against the standard libraries, certainly (typically subtle) behaviors no longer work.

In addition, they get the packaging wrong - not including certain files, not building certain modules.

<comment><USER4> I'm late here myself, but it seems to me the problem is that Ardour sticks to the long-since-EOL'd GTK 2 and relies on non-upstreamable behavior. The bad actor here doesn't seem to be the distros IMO.

</comment></comment></comment></comment><comment><USER5> This attitude is exactly why Unix has never managed to attain the same kind of software ecosystem that other OSs have.

</comment><comment><USER6> But why would a distro package software that one uses? And why would people use software they cannot easily install? You need some way of breaking the deadlock.</comment>


Show HN: A simple Covid visualisation tool - <AUTHOR> https://darajava.ie/covid <comment><AUTHOR> Source here for anyone that's interested: [https://github.com/darajava/visualise- covid](https://github.com/darajava/visualise-covid)</comment>


Author Gets Worst Reviews Ever on His Book - <AUTHOR> http://www.elephantjournal.com/2011/03/my-book-is-getting-the-worst-reviews-except-one/

<comment><USER2> His blog has 47 views. Even being on HN isnt getting him any traction.</comment>