The main trick in machine learning - <AUTHOR> http://edinburghhacklab.com/2013/12/the-main-trick-in-machine-learning/ <comment><USER2> A professor of mine stated it very well. If you can imagine that there is a _true_ model somewhere out in infinitely large model space then ML is just the search for that model.

In order to make it tractable, you pick a finite model space, train it on finite data, and use a finite algorithm to find the best choice inside of that space. That means you can fail in three ways---you can over-constrain your model space so that the true model cannot be found, you can underpower your search so that you have less an ability to discern the best model in your chosen model space, and you can terminate your search early and fail to reach that point entirely.

Almost all error in ML can be seen nicely in this model. In particular here, those who do not remember to optimize validation accuracy are often making their model space so large (overfitting) at the cost of having too little data to power the search within it.

Devroye, Gyorfi, and Lugosi ([http://www.amazon.com/Probabilistic-Recognition- Stochastic-M...](http://www.amazon.com/Probabilistic-Recognition-Stochastic- Modelling-Probability/dp/0387946187)) have a really great picture of this in their book.

<comment><USER3> _In order to make it tractable, you pick a finite model space, train it on finite data, and use a finite algorithm to find the best choice inside of that space. That means you can fail in three ways---you can over-constrain your model space so that the true model cannot be found, you can underpower your search so that you have less an ability to discern the best model in your chosen model space, and you can terminate your search early and fail to reach that point entirely._

It seems like you can "mis-power" your model also.

For example, the Ptolemaic system could approximate the movement of the planets to any degree if you added enough "wheels within wheels" but since these were "the wrong wheels", the necessary wheels grew without bounds to achieve reasonable approximation over time.

<comment><USER4> > For example, the Ptolemaic system could approximate the movement of the > planets to any degree if you added enough "wheels within wheels" but since > these were "the wrong wheels", the necessary wheels grew without bounds to > achieve reasonable approximation over time.

That would be an example of over-constraining your model (i.e. imposing the arbitrary constraint of a stationary Earth).

<comment><USER3> I don't think this is useful way to phrase the situation.

A system of Ptolemaic circles _can_ approximate the paths taken by any system. So the system really isn't absolutely constrained to follow or not follow any given path.

You could claim you have constrained your model not be some other better model but that, again, seems like a poor way to phrase things since a more accurate model is also constrained not to be a poor model.

Even specifically, the Newtonian/Keplerian system has the constrain of the sun being stationary as much as the Ptolemaic system has the constraint of the earth being stationary.

Edit: As Eru points out, the Ptolemaic system basically uses the Fourier transform to represent paths. Thus the approximation is actually completely unconstrained in the space of paths, that is it _can_ approximate anything. But by that token, the fact that it can approximate a given path explains nothing and the choices that are simple in this system are not necessarily the best choices for the given case, estimating planetary motion.

See - [http://en.wikipedia.org/wiki/Deferent_and_epicycle](http://en.wikipedia.org/wiki/Deferent_and_epicycle)

<comment><USER4> That's a good point, but after re-reading tel's original comment, I think my statement is still correct. Notice that tel's statement was that "you can over-constrain your model space so that the true model cannot be found". This doesn't necessarily mean constraining your model so that the true model is excluded from your parameter space. If your constraints technically encompass the true solution but only admit an overly complex parametrization of the solution, then it will still reduce (perhaps drastically) your power to find the true model. In this case, "overly complex" means unnecessarily many nonzero (or not almost zero) coefficients in the Fourier series.

<comment><USER3> My argument is that there are two kind of situations:

* The model could encompass the behavior of the input in a smooth fashion if it's basic parameters are relaxed.

* The model would tend to start finding models that are wildly different from the main model at the edges (space and time) if its parameter are relaxed, even if the model would eventually find the real model with enough input and training.

one has to handle these two conditions differently, right?

</comment></comment></comment></comment></comment></comment><comment><USER5> I applaud the author of this post. I've seen a lot of people suffer with machine learning because they don't understand this basic concept. Taking MOOC classes and reading textbooks is a great way to learn, but they tend to focus on a lot on the mathematical principle and not the start-from-nothing practical considerations.

Machine learning is almost like learning chess in that there are certain obvious mistakes that noobs continue to make. And like chess there are multiple levels of thinking and understanding that are almost impossible to teach to someone that doesn't have lots of experience. Hopefully more blog posts like this will help people get past the novice level.

Regarding technical content:

N-fold Cross validation [1] can be a more effective approach to having a single held out or validation set. You split your data into N groups, say N = 10. Then you use groups 2-10 as a training set to make predictions on group 1, then groups 1,3-10 to make predictions on group 2, etc. Recombine the prediction output files and use the measured error to tune and tweak your predictor. It's more work and can still lead to overfitting, but it's generally better to overfit the entire training set than it is to overfit one held out sample.

[1] [http://en.wikipedia.org/wiki/Cross- validation_%28statistics%...](http://en.wikipedia.org/wiki/Cross- validation_%28statistics%29)

<comment><USER6> The Coursera ML class has a week of lectures specifically regarding practical considerations. The prof discusses how to solve for underfitting/overfitting, and spends a lot of time on this idea of a cross-validation set. To whomever reads this, its a good course!

</comment></comment><comment><USER7> I work at a company that sells applied machine learning services, so I'd like to add a few more tricks to machine learning:

1) Have lots of data

2) Accept the possibility that your problem domain cannot be generalized.

I always find, whether in academic literature or in message boards, a desire to fit every round peg into a square hole. The reality of real world data is that sometimes, it's just a 50/50 coin toss. This might be because the features that _really_ indicate some sort of pattern can't be defined or they can and the data can't be reliably retrieved, or the humans running things have a poor understanding of the problem domain to start with.

TL;DR: There's no magic

<comment><USER2> My experience with real world (but still academic) data has been that there is lots of magic---feature selection to be specific.

(I'm not disagreeing, just referring to a different kind of "magic")

Everything else matters, but when your ML doesn't work it's 100% a feature selection problem. Which usually means it's 99% a problem of getting lots of domain expertise jammed up against a lot of ML experience and mathematical understanding. It's also a bear.

<comment><USER8> The way 80% of real real world (non academic) data mining problems are solved:

1\. Feature selection.

2\. intelligent data massage. Real world data has usually noise that humans can easily identify as irrelevant or erroneous.

3\. logit regression.

Starting with simple, well understood algorithms first should be the second lesson after knowing about validation sets. In those cases where they are not enough, they set the baseline for comparison against other algorithms.

<comment><USER9> I would add 4. Ensemble methods. Having a few models helps to generalize the data fairly well.

<comment><USER2> That's a good point.

</comment></comment></comment></comment></comment><comment><USER10> It's quite sad that this post is even necessary. That said, having a proper training/cross-validation/validation setup is sometimes not that obvious, as you have to stop and think about possible sources of contamination -- some sampling biases, for instance, can be quite tricky to detect, or your algorithm design might be flawed in some subtle way.

Personally, I wish people emphasized more the importance of a general understanding of econometrics when doing machine learning. In most of the introductory courses I've seen, the link between both field is never made explicit, despite the obvious analogies (coincidentally, there was an article by Hal Varian on the front page two days ago that discussed how both fields could benefit from sharing insights [1]). Understanding the idea behind minimizing generalization error is one thing, but I find that thinking in terms of internal/external validity and experiment design often gives people a more intuitive understanding of validation procedures, both regarding why and how we should do it. The same goes for understanding effect size, confidence intervals, causality (and causality inference), and so on.

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

<comment><USER11> >stop and think about possible sources of contamination

One great one from my Machine Learning professor was an assignment where we were required to normalize our data to [0,1]. After doing this and then going through the typical cross-validation cycle, he had us try and figure out where we contaminated our validation sets. As it turns out, we all normalized our data _before_ splitting it up, which meant that training data influenced testing data.

It's a simple fix, but if you've done that and gone to run a large convolutional neural network for a week only to find that you made a stupid error like that, it can be pretty painful. (Especially since the bad generalization error might not be obvious until you use it the model in production)

<comment><USER12> Maybe one could benefit from a sort of blinding procedure, where the person designing the learner is never allowed to even look at the validation data.

</comment></comment></comment><comment><USER13> I strongly disagree with the idea that validation sets are central to machine learning. The whole point of machine learning (usually) is to predict things well. Validation sets are merely one technique among many to gauge how well your predictions are doing. Because they are so easy, they are very common. But just because they are common doesn't mean they are central to the field. There are many other techniques out there, like Bayesian model selection (as the author mentions at the end).

<comment><USER14> Good to see Bayesian model selection get a mention. Bayesian model averaging is pretty interesting, too, in that it comes, in a sense, with built-in protection against overfitting.

I still think there is something quite fundamental, though, about validation sets and other related resampling-based methods for estimating generalisation performance (cross-validation, bootstrap, jackknife and so on).

The built-in picture you get about predictive performance from Bayesian methods comes with strong caveats -- "IF you believe in your model and your priors over its parameters, THEN this is what you should expect". Adding extra layers of hyperparameters and doing model selection or averaging over them might sometimes make things less sensitive to your assumptions, but it doesn't make this problem go away; anything the method tells you is dependent on its strong assumptions about the generative mechanism.

Most sensible people don't believe their models are true ("all models are false, some models are useful"), and don't really fully trust a method, fancy Bayesian methods included, until they've seen how well it does on held-out data. So then it comes back to the fundamentals -- non-parametric methods for estimating generalisation performance which make as few assumptions as possible about the data and the model they're evaluating.

Cross-validation isn't the only one of these, and perhaps not the best, but it's certainly one of the simplest. One thing people do forget about it is that it _does_ make at least one basic assumption about your data -- independence -- which is often not true and can be pretty disastrous if you're dealing with (e.g.) time-series data.

<comment><USER15> I agree. As a Bayesian hoping to understand my data, P(X|M1) is useful: it's the probability I have for X under M1's modelling assumptions. Of course M1 is an approximation, but that's how science is done. You get to understand how your model behaves, and you may say "Well, X is a bit higher than it should be, but that's because M1 assumes a linear response, and we know that's not quite true".

Bayesian model averaging entails P(X) = P(X|M1)P(M1) + P(X|M2)P(M2). It assumes that either M1 or M2 is true. No conclusions can be derived from that. It might be useful from a purely predictive standpoint ( _maybe_ ) , but it has no place inside the scientific pipeline.

There is a related quantity which is P(M1)/P(M2). That's how much the data favours M1 over M2, and it's a sensible formula, because it doesn't rely on the abominable P(M1) + P(M2) = 1

<comment><USER14> Yeah good perspective -- I guess I was thinking about this more from the perspective of predictive modelling than science.

Model averaging can be quite useful when you're averaging over versions of the same model with different hyperparameters, e.g. the number of clusters in a mixture model.

You still need a good hyper-prior over the hyperparameters to avoid overfitting in these cases though, as an example IIRC dirichlet process mixture models can often overfit the number of clusters.

Agreed that model averaging could be harder to justify as a scientist comparing models which are qualitatively quite different.

<comment><USER15> _Model averaging can be quite useful when you 're averaging over versions of the same model with different hyperparameters, e.g. the number of clusters in a mixture model._

Yeah, but in this case, there's a crucial difference: within the assumptions of a mixture model M, N=1, 2, ... clusters _do_ make an exhaustive partition of the space, whereas if I compute a distribution for models M1 and M2, there is always M3, M4, ... lurking unexpressed and unaccounted for. In other words,

P(N=1|M) + P(N=2|M) + ... = 1

but

P(M1) + P(M2) << 1

Is the number of clusters even a hyperparameter? Wiki says that hyperparameters are parameters of the prior distribution. What do you think?

</comment></comment></comment></comment></comment><comment><USER16> In more formal terms, you are trying to minimize the expected risk (generalization error).

The expected risk is the sum of empirical risk (training set error) and the structural risk (model complexity).

In many instances, having low empirical risk comes at the cost of having high structural risk, which is overfitting.

</comment><comment><USER17> I was just browsing through the classic "Mining of Massive Datasets" book (which is free!) when I noticed this apt passage in its introduction that explains the difference between data mining and machine learning:

[http://infolab.stanford.edu/~ullman/mmds.html](http://infolab.stanford.edu/~ullman/mmds.html)

> _There are some who regard data mining as synonymous with machine learning. > There is no question that some data mining appropriately uses algorithms > from machine learning. Machine-learning practitioners use the data as a > training set, to train an algorithm of one of the many types used by > machine-learning prac- titioners, such as Bayes nets, support-vector > machines, decision trees, hidden Markov models, and many others._

 _There are situations where using data in this way makes sense. The typical case where machine learning is a good approach is when we have little idea of what we are looking for in the data. For example, it is rather unclear what it is about movies that makes certain movie-goers like or dislike it. Thus, in answering the "Netflix challenge" to devise an algorithm that predicts the ratings of movies by users, based on a sample of their responses, machine- learning algorithms have proved quite successful. We shall discuss a simple form of this type of algorithm in Section 9.4._

 _On the other hand, machine learning has not proved successful in situations where we can describe the goals of the mining more directly. An interesting case in point is the attempt by WhizBang! Labs1 to use machine learning to locate people's resumes on the Web. It was not able to do better than algorithms designed by hand to look for some of the obvious words and phrases that appear in the typical resume. Since everyone who has looked at or written a resume has a pretty good idea of what resumes contain, there was no mystery about what makes a Web page a resume. Thus, there was no advantage to machine- learning over the direct design of an algorithm to discover resumes._

[http://infolab.stanford.edu/~ullman/mmds.html](http://infolab.stanford.edu/~ullman/mmds.html)

<comment><USER18> Will you need to change that definition if I show you a machine learning algorithm capable of significantly outperforming the best human algorithms on the resume classification problem?

</comment></comment><comment><USER19> I would say, to be succinct, that the main trick in ML is Occam's Razor ([http://en.wikipedia.org/wiki/Occam%27s_razor](http://en.wikipedia.org/wiki/Occam%27s_razor)).

It has been found that, for most problems, a simple model which well represents previous experience should be accepted instead of a more complex one with marginally better representation. I would claim that the reason this generally works is an empirical discovery, as opposed to a mathematical result, but probably has philosophical implications in its success.

<comment><USER20> Check out Bayesian Model Selection. It's the mathematical expression of Occam's Razor.

<comment><USER19> My point is that it shows up everywhere, just in different forms. Sparse coding has a penalty for large basises. Gaussian process regression tunes the density of its representation using Bayesian model Selection. SVMs have a slack parameter which dictates how many errors you'll tolerate to reduce the number of hyperplanes.

<comment><USER20> I apologize, my reply was aimed too low.

</comment></comment></comment></comment><comment><USER21> Andrew Ng emphasized this quite clearly in his Machine Learning course on Coursera.

</comment><comment><USER4> It's not directly related, but I always liked this little "koan":

A man is looking around at the ground under a street lamp. You ask him what he is looking for, and he says "I'm looking for my keys. I dropped them somewhere in that parking lot over there." "Then why are you looking inder this street lamp?" you ask. He answers: "Because this is the only place I can see!"

</comment><comment><USER22> Seems like HN is causing them problems. I saved the articles text at: [https://www.evernote.com/shard/s360/sh/4e19f93c-8425-440c-b9...](https://www.evernote.com/shard/s360/sh/4e19f93c-8425-440c-b978-cdd7aa6461f9/309dce824d9b6697b37b4c61251b6cfb)

</comment><comment><USER23> I think the situation is more complex than the author states.

For example if I have a linear model, Y = a + b * X, I will choose a and b to minimize in-sample fit. Choosing a and b to maximize out of sample fit goes against all theory.

However, if I want to choose which parameters go into my model, maximizing out of sample fit would be a good approach.

So at the end of the day, there is not a huge philosophical difference between using in-sample and out-of-sample fit, only different approaches to the same problem. In both cases, the assumption is (usually) the the data is i.i.d., and in both cases, you are choosing some coefficients/parameters/hyperparameters with the intent of maximizing out of sample fit, but using different methods.

<comment><USER24> Are you coming from a theoretical math point-of-view or background? It's hard for me to say exactly why, but I feel your response is evidence of just that "huge philosophical difference" between traditional stats and machine learning.

To me, even the statement "if I have a linear model" makes very little sense from the perspective of ML. Contrast with "if I think I'm dealing with a situation where a linear model might offer a good fit".

Regarding "maximizing out of sample fit would be a good approach", I think ML is always and just-about-only concerned with maximizing out-of-sample fit, for if it wasn't, the solution would be a lookup table.

I'm not trying to imply that you're wrong, rather that I think the 'gulf' is real. Or maybe I'm misunderstanding your point. For example, I feel that mjw's comment in this thread captures my view, which I think is more ML centered: [https://news.ycombinator.com/item?id=6878336](https://news.ycombinator.com/item?id=6878336)

Is that comment also in accord with your view, and it's me that's on the wrong side of that gulf?

</comment></comment><comment><USER25> Great post. It's like maths, you have to check your answers. Validation sets are a way of doing that.

I've been getting into ML lately for my startup, it's a personal finance system that will learn your habits and use that to predict things in the future. It's been overwhelming attempting to move into this domain of software engineering (so much so that I am currently just hard coding certain important patterns and using basic statistical modelling instead) but it is absolutely fascinating!

</comment><comment><USER26> Funny, that this idea is so foreign to ML. As a macromolecular crystallographer, R _free_ [0] is something drilled into every student's brain from day one!

TL;DR: Randomly, a certain percent (5-10%) of data is 'hidden' and never used for building/refining your model, but is only used to evaluate how well your model fits (or explains) that unseen data. This is absolutely, fundamentally essential to prevent _over_ -fitting your data!!

EDIT: Think that you are solving a huge jigsaw puzzle, but made of thousands of jello pieces. You randomly hide a 100 or so pieces and try to solve the puzzle. Having used all the pieces (except the hidden 100), you think the puzzle forms a Treasure Map. Now, you take the previously hidden pieces and try to fit those into the puzzle and if after using the hidden pieces your puzzle still looks like a Treasure Map, you may have found a (mostly) correct solution. But, if you are unable to fit those hidden places in a way that still keeps the Treasure Map intact, you must question if you did in fact find the correct solution or if there is another, slightly different, solution that may be (more) correct because it will account for the hidden pieces a little better?

[0] [http://reference.iucr.org/dictionary/Free_R_factor](http://reference.iucr.org/dictionary/Free_R_factor)

<comment><USER27> Don't kid yourself, the idea must have been foreign to the author of the post, but you won't find a single published paper that doesn't test its results using cross validation or at least on some standard test set.

</comment></comment><comment><USER28> Honestly, calling validation a trick isn't helping.

Understanding the motivation behind validation is an absolutely fundamental concept, and lack of coherence on the topic shows an inherent lack of understanding of the goal of building the model in the first place; GENERALIZATION.

This is synonymous with one checking in code that has no issues locally, without testing in the stack or a production environment.

I work and hire in this space and it's actually a bit shocking how widespread this lack of understanding is. Asking a candidate how to evaluate a model, even at a basic level, is this field's version of FizzBuzz. Just like Fizzbuzz, a lot of candidates I've encountered who are "trained" in machine learning or statistics fail miserably, and my peers seem to have similar experiences.

These issues are expected, given how popular data science is these days. We all win when more people are getting their hands dirty with data, but it's extraordinarily easy to misuse the techniques and reach misleading conclusions. This can potentially lead to people pointing fingers at the field and it's decline. The only thing we can do is correct the wrongs and do our best to limit incompetence that only serves to tarnish the field.

<comment><USER29> Count me among those who thought validation was a thing you just had to do when training ML algorithms. After all, the most beautiful theoretical model in the world is of no use if the predictions it delivers are terrible.

The real trick (for most algorithms) is to select the correct features to train against. This really is more of a black art than an exact science, so I think labeling it a trick is justified.

</comment></comment><comment><USER30> Link appears to be /.'ed (HN'd). CoralCache/NYUD.net doesn't seem to have it in cache. Anyone got a cached page/mirror?

</comment><comment><USER31> I think you need to view whatever process generated the answers as part of your model. In some cases, and in all textbook examples, we have a ground truth that is correct. But in real-world applications, such as segmentation problem in medial imaging, we have a gold standard which represents our best estimate, but is not necessarily correct.

Validation is not a magic bullet, we need to be critical of any part of the model that is given as truth, otherwise we might end up fitting a solution to the wrong problem.

More generally I think that textbooks should emphasize the need for the scientific method and stress that any model (or theory) is only as good as its ability to explain the entire problem domain.

</comment><comment><USER32> How does the brain generalize to data it hasn't seen before? Any theories?

<comment><USER33> According to Piaget's theory of development while we grow up we have different experiences from which we acquire new information. If we lets say, are naive with no experiences or memories at all, otherwise known as a "tabula rasa" stage, then we will start learning this new information and grouping it into correlated structures of knowledge, known as schemas. For example, different types of dogs can be one schema as they share characteristics and they are correlated knowledge..As we learn we not only create these schemas, but we also adapt them when new unknown information arrives. For example, if I only experience dog in my life, then when I see a cat I know that this is likely to be an animal and share characteristics with dogs, as this is similar to dogs and will most likely belong to the same or a similar schema..And that's how I personally believe we learn and interpret new information that arrives...

Of course there are many different theories, but that's my favourite.

<comment><USER34> I think in the context of machine learning the brain's ability to model the real world has evolved and a better model for the world represents a survival advantage. I don't know too much about how the brain actually models reality (and I don't know if anyone does) but the theory of machine learning still applies in the sense that each individual brain of each animal is a model and if you have a model that is too complex it will generalize poorly and therefore the owner of that brain is likely to do poorly in the real world.

It's very interesting in the sense that the totality of brains over time is essentially a sort of supervised learning with huge amounts of input data.

</comment></comment></comment><comment><USER35> Validation isn't "a trick", or shouldn't be. It's just being responsible. I'm sure there are people getting funded who don't know about it, but they're charlatans if they don't understand the dangers of overfitting (and underfitting).

<comment><AUTHOR> see the early history of learning, it was a discovery that is actually counter intuitive and a common trap for beginners. (don't minimize the training error)

I have seen new PhDs read about it "in theory", but not internalise it for practice, and then they go off an do Bayesian structure learning without a validation set. This DOES happen.

This post is to hammer into the brains of any beginner thinking about machine learning that understanding the validation set's purpose is the most important thing to internalise first.

e.g. Machine learning is easier than it looks: [https://news.ycombinator.com/item?id=6770785](https://news.ycombinator.com/item?id=6770785)</comment></comment>


Ask HN: Do you trust/install Docker in your personal computer? - <AUTHOR> I'm no longer using a separate computer from my employer and containers' security always worried me. Using VMs is very cumbersome in my opinion. I haven't used Docker in years, do you think it's safe enough now to install in your main computer (Linux host)? It's not like I'm going to test malware inside the containers but there's a lot of 3rd-party dependencies living there.
If you do trust Docker, what precautions would you take? Running without root is viable?
I'm aware of https://github.com/docker/docker-bench-security <comment><USER2> Running without root is totally viable, it is in fact encouraged. Take a look at: [https://docs.docker.com/engine/security/userns- remap/](https://docs.docker.com/engine/security/userns-remap/)

I think the concern should be around what environment variables are required to run, what was in the base image, what volumes are mounted between container/host thus persisted through run's and don't mount /var/run/docker.sock! You should assume the container can be breached and make it as hard as possible to break out.

</comment><comment><USER3> I think most people are ok running docker on their laptop / personal / work machines.

Running as non-root is totally viable, but root still seems to be the norm. You might look into configuring docker daemon to not open ports externally.

<comment><USER4> worth noting: for Docker Desktop (Mac and Windows), Docker itself is in a full VM, and not really the platform's root user.

<comment><USER5> Chrome OS also uses this model in its Crostini subsystem. In that case it runs LXC containers in a full VM. You can run Docker inside those containers, too.

</comment></comment></comment><comment><USER6> Container isolation based on a kernel that wasn't prepared for this never happened. It's like jails for BSD or cgroup for Linux IMHO. I have found one exploit valuable at $10K, capable of host escaping (RCE) that's still active based on the seller. You may be sceptical but don't forget this one: [https://github.com/Frichetten/CVE-2019-5736-PoC?files=1](https://github.com/Frichetten/CVE-2019-5736-PoC?files=1)

</comment><comment><USER7> My Debian VM starts in seconds. Last docker image I had to use was Ubuntu, and it was enormous. For local purposes, I didn't really see the point to using a docker container.

That, and I don't particularly trust overlay filesystems.

<comment><USER8> The official base Ubuntu image is really not particularly large, I'm assuming you were using an image with additional things installed? But regardless, once pulled, it is cached locally. Be sure to reference the image by specific tag/sha rather than latest to ensure you're not doing excessive pulls.

Overlayfs 1 had many issues. Overlay 2 was buggy for a long time and we needed to patch in aufs in production for stability and lock around image pulls to prevent kernel deadlocks. But at this point, overlay2 is extremely stable in the 4.x kernel series in production. Though, there is still the copy-up quirk with hard links but that affects very few applications in the wild.

If you don't like overlay filesystems, you can use the devicemapper storage driver, and if you set it to direct-lvm mode it should be pretty equivalent to VM based volumes. When it comes to mounting in shared directories from the host though, I trust docker's bind mounts much more than VM based filesystem solutions.

Anyway, if you work alone or on a small team, VMs certainly suffice and the appeal of docker may be limited, but much of the convenience of docker comes from the ecosystem and immutability of images. I've always found it frustrating that such an ecosystem was built around docker when it could have been done with VMs all along. If your company is building docker image artifacts of your software as part of the CI system and that software has many dependencies, executing a production build becomes as easy as "docker run X" and reduces the need for developers to standardize their workstations on one linux distribution. That said, while I find this incredibly useful, it's rare that I do proper development with local docker images unless I'm briefly touching something with painful dependencies (like getting the frontend stack working to make a quick UI change as a backend developer)

<comment><USER5> > I've always found it frustrating that such an ecosystem was built around > docker when it could have been done with VMs all along.

I think you underestimate the issues with that. Why do you think VM companies haven't jumped on this bandwagon?

The closest thing I see to that are the restricted micro-VMs like Firecracker. And a big part of the reason they exist is to support the needs of containers.

</comment></comment></comment><comment><USER9> I think being judicious about the source of your base images goes a long way towards safe usage.

</comment><comment><USER4> I'm pretty okay with it... if you're really concerned, run it in a full virtual machine to isolate it.

</comment><comment><USER10> I don't trust Docker since I have to install it from a third party repo, so I always run it on a separate machine and use ssh to send commands.

</comment><comment><USER11> What is your cause for concern?

<comment><AUTHOR> Getting my pc compromised in any way. My data is very important for me, both personal and from clients. Or an attacker gaining access to my accounts or servers. I also don't like telemetry but that's outside this topic I guess.

</comment></comment><comment><USER12> What are some use cases for running something like docker or podman on your personal computer? Genuinely curious.

<comment><AUTHOR> In my case it's for my local development environment. I also have personal projects and I do freelancing so I was tired of having multiple computers and using virtual machines.

</comment></comment><comment><USER13> you can add extra safety like: [https://gvisor.dev/](https://gvisor.dev/) _" A container sandbox runtime focused on security, efficiency, and ease of use."_

<comment><USER3> You could also set gvisor as the default docker runtime. I would do this except all my production belong to docker proper runtime.

Maybe I should redo my node pools on GKE now that using gvisor is a checkbox or flag

</comment></comment><comment><USER14> running applications in docker is safer than not running in docker. if you want to run multiple applications, you can use lxc (linux containers) instead.</comment>


Ask HN: Am I expecting too much from modern day web browsers? - <AUTHOR>

Allow me to explain myself.
I have the habit of opening things in tabs and then leaving them sort of hang around if I know I am going to need them in the next hour, day or week or so. I usually have around 50 tabs open at any given time. The problem is that this makes working with Chrome very painful. My definition of painful is: very slow to load pages, very slow to click to existing tabs, insane memory usage, unresponsive at some points.
In my limited knowledge of modern browser internals, I would assume that in the current age and technology, this would not be an issue. I know that Chrome for example compartmentalizes tabs as individual processes and thus the crashing of one tab does not affect the other.
I would also like to point out that when I state 50 tabs, I do not mean 50 tabs of animated flash smileys but just your normal average day to day working material. Flash is usually the culprit and requires killing from time to time on the Chrome task manager. That being said, they have a healthy mix of Flash, js etc. I have 8GB of ram and run Mac OS X 10.6.4 <comment><USER2> Imagine heading to your Applications directory, selecting all, and pressing CMD+O to open them all. Even if you're a typical user, and your apps are mostly just run-of-the-mill light Cocoa apps, having 50 running concurrently _will_ take its toll on the system.

Chrome's tabs are each running in their own process, it's very similar to running 50 copies of the same app. Modern websites are hefty even for just one tab (this is why Safari on iOS struggles to keep more than a few tabs in memory at a time).

</comment><comment><USER3> I suppose you could experiment with no flash at all using an extension and see if that changes things. Certainly flash has it's own memory cache and Apple is none too pleased with it.

Personally, using a Cr48 with 2GB memory, I don't see much performance difference between that and chrome my 27" iMac with 8 gb or winxp at work with 4gb.</comment>


The Entire Internet Will Be Archived in Canada to Protect It from Trump - <AUTHOR> http://motherboard.vice.com/read/the-entire-internet-will-be-archived-in-canada-to-protect-it-from-trump <comment><USER2> Article from the Internet Archive itself is currently on the front page: [https://news.ycombinator.com/item?id=13065599](https://news.ycombinator.com/item?id=13065599)

Doesn't look like this has much (if anything) to add.</comment>


The Bronica RF645 Rangefinder Revisited - <AUTHOR> http://photo.net/mjohnston/column3/ <comment><USER2> I still use a Bronica S2A from 1969! Leather and chrome, and the shutter makes the sound of slamming a car door; but it made me fantastic images since I got it, and I have 80x80cm prints that are absolutely gorgeous, using a Nikkor 50mm f3.5 lens.

That 645 to be fair looks quite nice, despite the lack of 'fast' lens. Given the format (bigger film) and the quiet leaf shutter, there is very little camera shake (like on a Leica M) so you can shut at silly slow speed with these, often 1/15s without any camera shake... And given the larger film, a wide open f4 will give you the same look as a much faster lens on a smaller format.

So, not bad. Nothing I'll replace my 6x6's and 6x9's with, but still very nice to see..</comment>


Ask HN: What is the best programming language to learn first? - <AUTHOR>

I am looking for something less verbose than Java but more robust than PHP.
I have been exposed to software as a product manager for several years and have witness how much longer coding in Java takes and how less scalable, less organized and consistent PHP is <comment><USER2> I would say that if your area is web development, your best options are the Ruby language and the Ruby on Rails framework, or the Python language and the Django framework.

You really can't go wrong with any of those.

I come from a .Net background and currently learning Ruby and Rails, and I'm impressed. Ruby is a very expressive language, not at all verbose, has good libraries and the community for the Ruby on Rails framework is impressive.

Before making the choice of what I wanted to learn myself, I spent a bit of time comparing the two and decided to go with Ruby.

</comment><comment><USER3> Python is currently Very Popular. I'm not a fan, but the popularity does give you access to lots of docs and help.

I would suggest C# is a good language for starting on Windows. It's popular, widely supported, and doggone easy to write GUI applications.

If you are working on Linux, Perl is good. It's almost everywhere, and can get everything done that isn't hard-real-time. It's also optimized for text processing.

The traditional route for ground-up understanding is C or C++. Those force you to deal up-front with a lot of low-level machine issues that only come up later in other languages.

If you are looking for the pure abstract programming language without worrying about usability, Scheme is likely your best bet.

Each of those languages provokes strong responses for and against. When choosing a language for a project, it is a engineering decision based on the tradeoffs.

</comment><comment><USER4> Consensus is: python/ruby, the "P" in LAMP (Heh. actually, the P" was perl or php). These 3 (including perl) let you absorb language syntax quickly so you can start learning the disciplines of coding:

\- OO and basic FP techniques

\- composition, delegation vs. inheritance

\- test-driven, mock/stub dependencies, what are your edge and corner cases?

\- benchmark, profile, optimize where needed,

(stuff like that)

</comment><comment><USER5> As mentioned, Python or Ruby/Rails are your best bets; if you wanted to do something a bit more unusual, you might consider a functional language like Haskell (as functional languages are an up-and-coming development paradigm)...

Check out Real World Haskell: <http://book.realworldhaskell.org/read/>

<comment><USER6> As a first programming language, I wouldn't consider Haskell, plus the Real World Haskell book could use a lot more polishing.

If you are seriously in it for the long hall, gentrysherrill's advice of learning a functional language is a probably a good choice, but it shouldn't be Haskell. Scheme or Common Lisp is a better choice.

Get Conrad Barski's new book Land of Lisp. Go through it first, then consider checking out the Little Schemer or How to Design Programs (version 2).

</comment></comment><comment><USER7> Python.

<comment><USER8> Try <http://learnpythonthehardway.org/>

</comment></comment><comment><AUTHOR> Is it easy to go from Phyton to PHP? and from Phyton to Java?

<comment> Ocho-Bits Not really, they're pretty diferents languages. What you really need is to develop the logic for programming, that's what's important!

<comment><AUTHOR> got it, thanks!</comment></comment></comment>


An Online Campaign Podium - <AUTHOR> http://www.chuzmi.com <comment><AUTHOR> An an online campaign platform for elections and other contests. Work in progress but releasing live now. One man project but collaborators welcome.</comment>


UK water firms admit using divining rods to find leaks and pipes (2017) - <AUTHOR> https://www.theguardian.com/business/2017/nov/21/uk-water-firms-admit-using-divining-rods-to-find-leaks-and-pipes <comment><USER2> This calls for a "I'm not even mad, that's amazing." meme. It really just shows how deep superstitions can go. Even the company that defended it clearly knew it wasn't an effective method: "Hi Sally, sorry about the delay. Some of our techs do on occasion use dowsing rods however, we also have access to a wider range of accurate technology, which most techs find preferable"

</comment><comment><USER3> Wow, this is the most amazing story I've read in a while. Are dowsing rods really believed to be a successful method of finding water by a decent number of people?</comment>


Foreign Exchange Arbitrage with Haskell - <AUTHOR> http://www.fatvat.co.uk/2010/07/foreign-exchange-arbitrage.html

<comment><USER2> >> Assuming that I've understood the format properly (anyone know any good books to get this kind of basic information?), then running this code through the 21 million (!) ticker updates in January 2010 yields absolutely ZERO arbitrage opportunities. With my limited knowledge, I think this is because of the efficient-market hypothesis.

This doesn't even support an extremely weak version of the efficient-market hypothesis. It's very easy to believe that simple, first-order arbitrage opportunities like this effectively don't exist; the weak version of efficient-market hypothesis implies that the price of significantly more complex assets reflect all publicly available information. Possible currency arbitrage opportunities like he tried to find don't even require any information beyond the prices.

That said, it's very cool that he did this, even if the results are unsurprising.

<comment><USER3> I'd really like to understand more about markets and how they fit together. It sounds like you've got a better understanding than me, can you recommend any good books?

(I'm the author of that thing)

</comment></comment><comment><USER4> >> Back to the drawing board with my money making schemes!

Is anyone surprised with that result? Nice reading though, i appreciate his time and willing to share the result. I would be to lazy to prove that myself. ))

</comment><comment><USER5> You can also do this using standard Bellman-Ford or Floyd-Warshall if you set edge weights to be -log(exchange rate).</comment>


How I Could Steal Money from Instagram, Google and Microsoft - <AUTHOR> https://www.arneswinnen.net/2016/07/how-i-could-steal-money-from-instagram-google-and-microsoft/ <comment><USER2> Do premium phone numbers have any remaining legitimate use? The last time I remember hearing about them was in the context of a callback scam, where scammers would call and hang up after one ring so that people would call the caller ID numbers. Actual pay-per-minute phone services seem like a rare special case that would be better served by having people type credit card numbers into the line with their dialpad.

<comment><USER3> Sometimes used for payment and donations, especially in countries where a lot of people have phones but not credit/debit cards (e.g. Germany)

<comment><USER4> How do Germans buy things online without credit cards?

<comment><USER5> PayPal

Or SofortÜberweisung where you give the login data to your online banking and a TAN to a shady 3rd party company and they perform the wire transfer for you - while sending a confirmation to the merchant that the money has been sent.

No, this is not a joke. [https://de.wikipedia.org/wiki/Sofortüberweisung](https://de.wikipedia.org/wiki/Sofortüberweisung)

<comment><USER6> I am lucky to know nobody that uses this crap of Sofortüberweisung.

</comment></comment></comment></comment></comment><comment><USER7> In the article, the author mentions contacting Google + they instruct him to attempt pen testing on email@example.com. Didn't know they maintained an account like that. Interesting.

</comment><comment><USER8> Do only I think that the rewards of 2000, 0 and 500 are incredibly low?

The motivation is much higher to keep the bug for yourself and create several 10 000 easily before anyone ever would notice.

<comment><USER9> I'm surprised they got anything at all.

A few hundred dollars a year is _nothing_ for these companies, not to mention that if you actually tried to abuse this to a substantial level I am 100% confident that it would be detected and blocked.

It's like filing a bug bounty that you can sign up for multiple AWS accounts and mine bitcoins in the free tier. Up to a certain level, they just don't care. Past that level, you'll be detected and mitigated against.

<comment><USER10> Doesn't AWS require a working credit card to start using the free tier?

<comment><USER11> They also accept prepaid debit card. I use one in my account.

</comment></comment></comment></comment><comment><USER12> I understand how these call would cost Instagram/Google/Microsoft money. But, could someone please explain why a call to a premium number "earns" the account holder money?

<comment><USER13> So you can obtain a premium number, and then when anyone calls you on that number they get charged the rate that you set per minute and after fees, you get the money. That's how pay per minute phone services (esp. adult services) work.

So what he did was to get one of those numbers and then have Google / Facebook / Instagram call that number repeatedly and that's how he would get money.

<comment><USER14> But the phone company requires ID and bank info to obtain a premium number. And then when you do this, google calls them to complain, and phone company terminates your account, keeps the money, and reports you to the police for fraud. Doesn't seem like a very good exploit.

<comment><USER15> This isn't true. You can get such numbers all over the world; some you can sign up for online and provide reasonably anonymity. You can make a lot money doing scammy-stuff and the risk of being prosecuted is pretty low. It's just not worth trying to go after some guy with an account with a telecom in Elbonia.

The cases of telecom fraud that I know of that were caught are usually due to incredible arrogance on the perpetrator's fault. In one case, he actually called the company he was attacking to gloat that they could never get him. (The company used a super-vulnerable-yet-expensive switch that literally had bugs like "&admin=1 gets superuser".) I've not seen a VoIP system that was remotely secure.

</comment></comment></comment></comment><comment><USER16> A friend runs some SIP networks, he said sometimes when hackers get access to a line they make calls to premium numbers in North Korea and other places. They can run up a 5000$ bills pretty quickly.

<comment><USER17> I think I recall viruses doing the same in the early 90's, so this isn't exactly a new idea.

<comment><USER18> In some parts of the world it was the kind of thing you could have happen to the household by just letting your stupid little brother look at one or two naughty ads in the back of a magazine ..

<comment><USER19> I think there was a TV show or ad instructing children to pick up the phone and hold it near the TV which then was playing dial tones.

<comment><USER20> please source someone!!!

</comment></comment></comment></comment></comment><comment><USER21> If you haven't already, call your phone provider and tell them to disable premium calls/texts/services. They're obsolete and quite a number of them are pure scams.

<comment><USER22> Why do the effort if I have literally never had it show up on my bill? If it did I wouldn't pay it.

<comment><USER23> Does that actually work? I've always been curious if you could actually "not pay it".

<comment><USER24> If you can convince your provider that the calls were not legitimate or the premium number provider did not disclose fees, etc. your provider will probably tell the premium number's provider to pound sand. Or convince them it was your kid. At least in the US, people under 18 cannot make these calls and so don't have to pay.

</comment></comment></comment></comment><comment><USER25> Cool idea. My sense is that they would catch on before the amounts reached anything substantial, but who knows. Either way, fun as a thought experiment.

<comment><USER26> I wonder what "substantial" would mean to a company like google or microsoft.

Besides, if the exploiter spreads the calls out well enough, I wonder how long it would take until it gets detected..

</comment></comment><comment><USER27> Reminds me of when I was a kid and used the next phone phone over to accept a third party paying call. Or, when answering machines in the early 90s only had two digit pass codes. I would change the out going message to to "yes yes yes yes yes ..." so when the automated machine checked if the phone would accept charges it would.

</comment><comment><USER28> Any one else think that the bug bounty rewards were quite low?

<comment><USER29> Yeah, but it seemed that they were low because both Google and Microsoft value the security of customer data over their own finances, and thus don't care as much about exploits that drain their wallets. Resulting in a lower bounty.

<comment><USER30> nah, Microsoft revealed they outsourced all the financial risk to a "partner" and didnt care for it :-)

</comment></comment></comment><comment><USER31> You certainly deserve a bug bounty bonus from all these companies.

</comment><comment><USER32> amazing..so any service that sends an automated call to premium numbers can be exploited in this manner

<comment><USER33> The smaller ones would be using services like Twilio, I would imagine. Does Twilio insulate users from this at all?

<comment><USER34> Looks like the call fails and they return an error message.

"Twilio does not support outbound calls [...] to [...] premium rate telephone numbers."

[https://www.twilio.com/help/faq/voice/what-types-of-phone- nu...](https://www.twilio.com/help/faq/voice/what-types-of-phone-numbers-can- i-not-dial)

</comment></comment></comment><comment><USER35> Super cool!

When input validation doesn't stop at ";&' and similar :)

</comment><comment><USER36> How could they miss that?!</comment>


Dell "masked gunman" marketing stunt causes panic - <AUTHOR> http://www.geek.com/articles/geek-cetera/dell-masked-gunman-marketing-stunt-causes-panic-two-employees-arrested-20110216/

<comment><USER2> "This is one of the most stupid ideas I have ever heard. A manager decides to dress a co-worker up as a biker wearing a mask and carrying unidentified metal objects while yelling at people to go to the lobby. My initial thoughts in that situation would probably be that this guy is an intruder and is on his way to hurt somebody or blow something up."

Sums it up nicely</comment>


Ask HN: Where to Find Computer Science Research Papers? - <AUTHOR> My brief search into this only led to the ACM digital library, which seems pretty good. Are there any other services, free or paid, that provide access to old and new computer science research? <comment><USER2> Library Genesis has scientific article search (and free and instant download). It finds almost everything I search for, even obscure papers from early 20th C or before.

[http://gen.lib.rus.ec/](http://gen.lib.rus.ec/)

Also you can click on the journal titles and explore within each issue.

</comment><comment><USER3> [https://whereisscihub.now.sh](https://whereisscihub.now.sh)</comment>


Top Ten Mistakes in Firefox 3 - <AUTHOR> http://um.com.au/firefox3/ <comment><USER2> 9: are there really more buttons than ff2? You can hide the status bar, but he wants it by default.

8: This is Ubuntu's fault. Addons will be more available for firefox 3 after firefox 3 is released. Amazing!

6: I think the intention is to make a page with these problems look broken, protecting Bob Average from attack sites. Also, it lets the problem stay more within the current tab. Having context for errors is awesome, and being interrupted isn't.

5&3: didn't xforms get some major change too late in the development of firefox 3? And Acid 3 came way too late for the gecko version being used.

7&4: Yes the preferences are cluttered, and about:config options often require way more explanation than a single line before you know if you should be changing them (no).

"Enable pipelining? Sure! Max connections? This will make my pages load faster! -O9 -funroll-loops -f2fast2furious -fomit-frame-pointer? Rad!"

<comment><USER3> > Acid 3 came way too late for the gecko version being used.

Opera and WebKit aced it two months ago. Gecko had plenty of time.

One of the Mozilla guys explained here the Firefox approach to Acid 3:

[http://shaver.off.net/diary/2008/03/27/the-missed- opportunit...](http://shaver.off.net/diary/2008/03/27/the-missed-opportunity- of-acid-3/)

In the end, though, it comes across as a poor excuse.

</comment></comment><comment><USER4> wow, the author is picky.

<comment><USER5> I can't disagree with him on some points however. I do wonder if he filed bugs for each of his criticisms back when FF3 was still in early beta. That would've been somewhat more helpful.</comment></comment>


Ask HN: Design and UX - <AUTHOR>

I am a liberal arts grad from the Bay working sales and marketing for a Start-up, but I am interested in learning UX and design, so I was just curious if you guys had any recommendations for where I should start? I know there are a lot of resources out there to learn programming and web development, but I am less informed about what's available for design.<p>Thanks! <comment><USER2> To me, the most fundamental thing to get familiar with is typography — especially pre-digital type. Here are a few leads for you:

Die Neue Grafik, Josef Muller-Brockmann, The Elements of Typographic Style, Jan Tschichold.</comment>


Show HN: Drive development of missing features from any open source project - <AUTHOR> http://codemill.io/for-open-source <comment><USER2> An interesting idea. It looks like there is a point in time at which the developer has produced and delivered code but has not been paid.

What steps does the platform take to prevent developers from getting stiffed?

<comment><AUTHOR> Yes, there is this point at time between the pull request and the merge. We didn't build any engine to support a possible negligence by the client who sponsors the work. However we do believe that clients won't just "submit" work orders and then ignore them.

<comment><USER2> Because Github allows pull requests to be reviewed prior to merging, what protects the developer from someone just using their work without paying? It seems that the platform pushes all the financial risk on the developer.

<comment><AUTHOR> This is true also outside of the platform and in any business whatsoever. The payee is always at risk of not being paid. That said I believe this system will overall prove to reduce risk for developers and increase overall collecting ratio. The tasks that are being dealt here are meant to be small and specific. Not full scale projects. And once a merge happens, the payment is immediate. Also, a developer that uses this system heavily will have a never ending pipeline of work and won't be required to do marketing and customer care anymore, so all in all, their monthly income will increase.

<comment><USER2> Just to be clear that the payee is not always at risk, I am in the habit of requiring retainers applicable against final invoice, i.e. the risk rides with the payer not the payee. In other words my clients are typically vetted by requiring them to write a check and pay for the work I do not "only if they like it".

Anyway, I expect that the problem this is meant to solve is more likely to be driven by the supply side than the demand side...there's an unending line of people who want better free software and a shortage of people who are capable of delivering it with quality.

On the other hand, if the platform backs up developers against non-payment, then there is an alignment of interests toward screening for good customers. It would also put some money behind the assumption that the payees are going to tend to be good actors.

</comment></comment></comment></comment></comment><comment><USER3> This tagline isn't making justice to this awesome idea (I had a very similar idea some time ago, so I will say this)!

I hope people start using it. Also, I want the answers for brudger's questions too.

<comment><AUTHOR> What would be a better tagline in your opinion?

<comment><USER3> I don't know, it's just an impression I had. But I'm not even a native English speaker so I'm probably wrong.

</comment></comment></comment><comment><USER3> I'm having trouble to open a task. What exactly should I do after opening an issue on GitHub? I don't see any special tags on the repo I added to CodeMill.

<comment><AUTHOR> If by accident you've opened the issue before applying CodeMill to the repo, or added the codemill$price tag in an edit action (github doesn't fire webhooks on edit issues) then please simply add a new comment to the issue with the codemill$price tag and it will work

<comment><USER3> Right, I missed this magic string behavior, and after I had a problem with the edit thing, but now I finally made it. I'm a cheapo.</comment></comment></comment>


Napoleon: A Screenplay by Stanley Kubrick [pdf] - <AUTHOR> http://www.raindance.co.uk/site/picture/upload/napoleon.pdf <comment><USER2> beyond the technical aspects of what was going to be done with kubrick's napoleon, it seems as though lot of the same ideas from this film were encoded, in reverse, into barry lyndon.

the more i read about napoleon, and what could have existed had it been allowed to be made, the more i come to appreciate what was actually accomplished with barry lyndon.</comment>


Rails UI Widgets Plugin (even less work now) - <AUTHOR> http://blog.seesaw.it/articles/2007/09/18/rails-widgets-plugin

<comment><USER2> Can anyone point me to a good tutorial for widgetizing a web app? Everything I find when searching is related to Mac desktop widgets or something else specific, like Google gadgets or Wordpress.

<comment><USER3> ASP.NET has this thing called WebParts. Good for widgets :)</comment></comment>


Requiem for the American Dream - Chomsky Documentary on Kickstarters - <AUTHOR> http://www.kickstarter.com/projects/pfpictures/requiem-for-the-american-dream-the-chomsky-documen

<comment><USER2> Manufacturing Consent was a life-changing event for me, so good luck. But suggesting the film will resemble "fog of war" seems odd since that was a confession by someone complicit in the tragedy under discussion. Frankly, i'd be happier with a sequel to Manufacturing Consent.

</comment><comment><USER3> I find a Chomsky documentary on Kickstarter to be an interesting idea. Is this entirely what we should expect given his worldview, or a subtle case of irony?

<comment><AUTHOR> To be clear here, I'm in no way involved with the documentary. I am however, an avid reader of books, and Chomsky is a major author in that collection.

Personally, I think the trailer is a bit of a glorification of Chomsky's social political criticism. And in that respect, this would fit perfectly. I just hope they leave out the melodrama in the documentary.

</comment></comment><comment><USER4> Definitely needs some work on the audio mix, I found the dialogue quite hard to hear over the cliché Requiem for a Dream-esque music.

</comment><comment><USER5> I was confused by the title – "Kickstarter for Chomsky documentary" would be more accurate.

<comment><AUTHOR> That makes me curious, what do you think it was? Chomsky talking about kickstarter?</comment></comment>


Show HN: SMSPoly - A smarter way to send SMS online - <AUTHOR>

SMSPoly will allow people or small companies to send SMS online for affordable prices. I would love get some feedback on the idea, any input is appreciated. Thanks in advance!<p>SMSPoly.com <comment><USER2> What are you showing? This is just a name of a product that doesn't exist and it explains nothing. Is it an api so my apps can do this? An app that I would use to send sms?

<comment><AUTHOR> SMSPoly is basically going to be a SMS marketing service. Yes, we are absolutely going to have an API too and your apps can use it directly as well. Lastly, we are always to open to suggestions for this application to make its direction better. Sorry for the less information given on the post.

</comment></comment><comment><USER3> I get you're doing a mvp by putting up this landing page but there is nothing of substance on the site to give feedback about.

<comment><AUTHOR> Thanks for the feedback, now I put a contact button. Please feel free to send me your ideas.

</comment></comment><comment><USER4> _"Leave your email to get discounts when we ready!"_

Grammar: should be _"...when we're ready!"_

<comment><AUTHOR> Thanks, it is fixed now.

</comment></comment><comment><AUTHOR> Live link: <http://smspoly.com>

</comment><comment><USER5> Will this be cheaper than Twilo?

Will this have an easier API than Twilo?

<comment><AUTHOR> Actually, we are planning to use Twilio API and SMSPoly will be like a sms marketing service with an API as well. The API is going to be an abstraction over Twilio' and hopefully simpler one.

</comment></comment><comment> mike-cardwell There are loads of websites that do this

<comment><AUTHOR> Can you please list the well-known ones?</comment></comment>