Education dominates Singapore's 'different' culture - <AUTHOR> http://www.cleveland.com/opinion/index.ssf/2012/11/education_dominates_in_singapo.html <comment><USER3> "And no one would dispute that the key to all this success has been education."

I would.

Singapore is what it is because of their strategic placing in the wold today. The only reason the English decided to convert this tropical island in the commerce nucleus it is.

People always rationalize how when something good happens to them it is always because of their merit alone.

Spain discovered America because it is on the extreme of Europe and not in the center, Germany is an Industrial nation because it has so much water and coal, and is very cheap to transport things and USA has the bigger and most fertile plains in the world for a very small population.

Now ask an American, German or a person from Singapore what is the key of success and they will tell you hard work of course, but they don't work harder than people from Central African Republic(I had been there, very beautiful and rich but in the middle of nowhere, with no infrastructure, and very poor).

<comment><USER4> [Disclosure- my best friend immigrated to Singapore after his PhD in Europe]

Natural factors play a role, but only so much. IMHO, _you_ are rationalizing. There are many places in the world that are strategically located and resource rich, but they didn't grow as much as Singapore did.

In Asia, if I was a villain, I would put my lair in Timor (if I wanted an island) or New Guinea (if I wanted land) - just between India, Australia, Japan, etc.

Water and coal are abundant in many places. Argentina has great fertile plains and a lower population. Coal was first mined in China, and in the UK which also had IIRC more coal and water than Germany.

Hell, following your explanation about the new world, Portugal and Ireland are even more at the extreme of Europe- they should have discovered America! They didn't (I know the story about Vinland, the vikings an so on - but they didn't do as much as Spain did)

It we are talking about geographic distance, southern Morocco or Senegal would have been at an advantage - but they didn't do it.

It's too easy to rewrite history. Education and investment are clearly driving growth.

Show me a country that is betting big on education and pushing for investment (preferably local, from savings), even if it has not much politically stability it is a country with a bright future.

Besides India (who will certainly be the next big thing after the US - <USER2> China IMHO), I'd put my chips on countries like Estonia, Kenya, Uruguay.

<comment><USER5> _Show me a country that is betting big on education and pushing for investment (preferably local, from savings), even if it has not much politically stability it is a country with a bright future._

Historically that is not true. Countries which increased their investment in education tended to have (slightly) slower economic growth, at least in the period 1960-2000.

Paper: [http://econ399.atwiki.com/file/open/21/Where+has+all+the+edu...](http://econ399.atwiki.com/file/open/21/Where+has+all+the+education+gone.pdf)

Blog post with key graph: [http://econlog.econlib.org/archives/2012/10/did_nations_tha....](http://econlog.econlib.org/archives/2012/10/did_nations_tha.html)

<comment><USER4> Thanks a lot for the link, it is a very interesting study (reading that ATM), however they only consider the increase in year of education - or, as written in the comments on the blog _"There is proof that more people received more years of schooling, but there is no proof that more people became more educated"_

It could be another Leontief-like paradox, ie discarding the education efficiency.

I would be curious to know if such results hold when only STEM education is included (no humanities), and if there appear difference between pre- university and university education (I would expect raising the population literacy to have less effects - ie starting from a lower education might require more investment in education) once corrected by emigration (brain drain- remittances will help, but we're looking at something else)

<comment><USER5> There are all sorts of possibilities. My only point is that the link between education and economic growth is far from clear.

<comment><USER4> Indeed, and I should have been more careful with my affirmations.

But at least I now have learn something interesting - it has been disproved that only increasing education length had any effect of growth.

</comment></comment></comment></comment></comment></comment><comment><USER6> This is a very simplified view of the education system in Singapore. Of course education should be important, but it can also go too far.

I've been in Singapore for 1 year as an exchange student. While I managed to cope well, many slightly less talented students suffer from the great workload and have almost no free time. In a middle class secondary school, about 95% of the children need tuition to keep up with school. Weeks or even months before their exams, all free time is eliminated and dedicated to studying.

The learning itself isn't perfect either. It's heavily focused on memorization and involves no oral participation. Foreign languages are almost never taught; math and natural sciences matter the most. Competition is promoted instead of teamwork (not only amongst students, but also amongst teachers and civil servants in general). The teachers are ranked according to their students' results, which does work as a motivator, but discourages them to explain any background information or topics that are not required from exams.

Parents urge their children to get the best degree they can in order to be able to take up the best paying job they can find. Money is the measure and not personal satisfaction. Arts, therefore, are not very popular.

I'm highlighting here all negative aspects to contrast the posted article; of course it is good that Singapore does promote education and the education system certainly works better than the ones of most other countries. Also, this is not directly related to Singapore, but represents the Confucianist mentality that one can find to a lot extremer extents in Japan, China and Korea.

<comment><USER4> > (competition, no foreign languages, science first) > Parents urge their > children to get the best degree they can in order to be able to take up the > best paying job they can find. Money is the measure and not personal > satisfaction. Arts, therefore, are not very popular.

> I'm highlighting here all negative aspects

It does not look like negatives to me, but a recipe for success - ie focus on the important and cut the useless.

(And in a country with as many immigrants as Singapore, I'm sure the issue of foreign languages is self solving :-)

<comment><USER6> That's a very narrow-minded way of looking at success. The success of a state is much more than just attaining wealth — it's about serving the people and giving them all possible opportunities to pursue their dreams and live a happy life. Money is just a means to be able to carry out these tasks.

And there are enough statistics out there to prove that money is far from leading the list of things that matter most to the happiness of humans.

PS: _(And in a country with as many immigrants as Singapore, I'm sure the issue of foreign languages is self solving :-)_

The three ethnic groups in Singapore get in touch with each other quite well, that's true, but contact with any other culture such as European ones is rare (expats just stay amongst themselves). Furthermore, learning a language requires more than just knowing native speakers.

<comment><USER4> I admit my way is narrow minded, but it is also the currently admitted way of looking at success - attaining wealth to maximize intertemporal consumption.

Money is indeed just a way to carry out one's dream, but without this way, dreams will in fact remain dreams.

Personally, I would disregard cranky statistics or ranking such as the highly subjective Happiness Index where the US get the last place, which does not match the data since many people want to immigrate to the US (and not so much want to flee that Berlin-wall style fences had to be erected to protect Mexico from the hordes of US emigrants)

I'm sorry if this is offensive, but there are plenty of statistics, yet I like it better when statistics match the actual facts like decision made by humans beings who want to immigrate to another country.

[IIRC, there are other indexes which gives points by default, like based on longitude of the country (for the climate), etc. I guess Canada won't win on them :-)]

</comment></comment></comment></comment><comment><USER7> Singaporean here.

My biggest gripe with Singapore's state as it is (and why can't we criticize it?) is that while Singapore does have a stronger emphasis on education (GREAT!), it still falls behind in knowledge.

Singapore has no natural resource, and thus no natural export. Its main exports (other than "tourism" which doesn't count) is through secondary products like petroleum, and through its workforce, considered high-value by companies around the world.

Its workforce, being a resource, is therefore treated like a resource. And resources must always be more readily available, more efficiently farmed, more accurately quantified. The only way to survive in this country is to go through the gauntlet, and get stamped with a quality grade like beef.

My personal hope for the future of Singapore is to slowly make the transition away from treating its humans as a workforce resource, and to start treasuring their humans as a knowledge bank. Indeed, I believe Singapore has realised this, with its growing bio-technology sector, A* etc. However it is a race against time; unlike other resources, its workforce can turn against it.

No I'm not really speaking about revolution etc. But years of being a resource has put a toll on the population... just as a engine that is run in overdrive for too long wears out. Many of the Singaporeans who can afford to find a better life elsewhere, where their knowledge is valued higher, are doing so. Those that do not have that knowledge are simply resigned to being the nation's workhorse, and take no effort to seek it themselves (or perhaps they cannot afford to).

This puts Singapore in a weird position. It is suffering from "brain drain". And the current remedy for it is importing knowledge from elsewhere. Unlike regions like the US, EU, AU, where populations are made up of many varieties of cultures, Singapore is a young country with only 3 major ethnic groups, and outsiders are viewed as such. This further axacerbates the feeling that local workers are just their workers.

Anyway, after that long blob, my 2nd personal hope is I may be able to return to my country and contribute back, not through workhours, but through knowledge.

Disclaimer: this is all my views and intuition, I don't have any links or numbers to back things up.

<comment><AUTHOR> A Singaporean friend of mine just saw my posting of the same United States editorial on my Facebook wall, and she suggested the 29 October 2012 article "A less exam-centric approach to build character, creativity,"

[http://www.todayonline.com/Singapore/EDC121029-0000030/A-les...](http://www.todayonline.com/Singapore/EDC121029-0000030/A-less- exam-centric-approach-to-build-character,-creativity)

featuring quotations from a speech by Deputy Prime Minister Tharman Shanmugaratnam of Singapore as a possible response. It does appear that people respond to incentives, and the Singapore education system has set up pretty good incentives for one set of behaviors, with an ongoing debate in that slowly democratizing society about what behaviors to encourage for the next stage of Singapore's development.

AFTER EDIT: I just reread all the other comments in this thread, in light of what they are saying in response to one another. I should respond to a couple that come from someone evidently much younger than I am, who has spent time in Singapore as a foreign resident (with what language background?).

At the top comment level:

 _Foreign languages are almost never taught_

Grandchild to that comment (from same HN participant):

 _The three ethnic groups in Singapore_

As a member of the older generation, I can remember when Singapore had a lot more than the current "three ethnic groups" (that would be Chinese, Malay, and Indian, by the reckoning of Singapore) as an actual linguistic matter. To both points, by the Singapore government's own statistics,

[http://en.wikipedia.org/wiki/Demographics_of_Singapore#Langu...](http://en.wikipedia.org/wiki/Demographics_of_Singapore#Languages)

as recently as 1990 there was no one language of the four languages that are official in Singapore--Malay, (Modern Standard) Chinese, English, and Tamil-- that was even spoken at home in the majority of homes in Singapore. School instruction has been in English since independence in 1965, but only a tiny minority of the population spoke English at home in my generation. I would have to consider a country that has four official languages from four different language families, NONE of which the plurality of the population spoke at home just a generation ago, a very successful country in teaching second languages. And if today people in Singapore think that "Chinese" is one ethnic group, they have forgotten a lot of ethnic division between Hokkien speakers and Hakka speakers and Cantonese speakers (who speak mutually incomprehensible Sinitic languages, all of which I have studied in addition to Mandarin) that is also very recent history in that country and other parts of the Chinese-speaking world.

</comment></comment><comment><USER8> Hacker News clearly has a strong interest in education, I find this interesting because I see misguided attempts in trying to educate the masses on HN. The tone comes off the wrong way and it hurts the substantive content coming from the knowledge many HN contributors have to offer.

Some thoughts for HNers and their future attempts at educating others in this forum:

The comment threads are here for conversations and the exchange of thought, not for the assignment of homework in the form of white papers/books. Mentioning your sources I'm sure is always welcome, but many seem to assume that anybody who hasn't read the same material as themselves is somehow incapable of contributing to a conversation on the subject at hand. That is an egregiously poisonous mindset.

If you want to make the most of your time on HN have more respect for others and synthesize your knowledge. Let a conversation happen.

By all means link your sources, but say what you're going to say and don't assign homework.

Contextual synthesis > PDF

That's my $0.02 (not denominated in Verizon-units).

\--- With that out of the way ---

More related to the article, I've visited Singapore and know a few Singaporeans. One of the main takeaways was that they're hyper-competitive and aggressive in ways I'm not sure US gov'ts/voters would ever really countenance for the sake of progress.

The article is rife with Orientalist gawking and murmuring of approval. Typical for the current mode of reporting on how Asia does things differently than the West. (Cf. Friedman's absurd pseudo-capitalist posturing on China)

Mentioning the chewing gum ban, seriously?

Money quote: "But it's really more about discipline than intelligence."

<comment><USER9> _The article is rife with Orientalist gawking and murmuring of approval. Typical for the current mode of reporting on how anybody in Asia does things._

It's superficial, to be sure, but at least it lets Singaporeans speak for themselves about the cultural difference. The true purpose of the article seems to be to say some things about Cleveland that can't be said directly, so a more nuanced take on Singapore might be beside the point.

<comment><USER8> It's better than others I've seen, for sure. I'm just not familiar enough with Cleveland (other than knowing it's a disaster zone) to really know how this article is supposed to reflect upon circumstances there.

I can hardly believe anything more than a tiny fraction of HN readership is familiar with the situation there either, so I have to go with the more obvious parts.

I'm not an English Lit major, I'm not super-interested in deep meta-analysis of author intentions.

</comment></comment></comment><comment><USER10> Singaporean here. The article is a typical outsider view of our system, which isn't as perfect as it sounds.

In the first place, the majority of Singapore's successes is largely due to a pro-business policy which has attracted massive amounts of foreign direct investment.

In the second place, my observation is that in general Singaporeans are well- schooled, not well educated. As Mark Twain put it, there is a difference.

And there is also the uglier side of a hyper-competitive system which darylteo has pointed out. And then you ask yourself, where do the "losers" of this competition end up?

The challenge at this stage is to ensure we move our lowest gear up - and I can assure you, our lowest gear is pretty low. Unfortunately, unless the technocrats get mind-transplants from the people who did the Finnish or Danish model, I don't think its going to change.

<comment><USER11> >And then you ask yourself, where do the "losers" of this competition end up?

Where do they end up?

</comment></comment><comment><USER12> I grew up in Singapore and went through the education system there before moving to North America at 16. Singapore isn't really the "education heaven" that it is made out to be.

The biggest different I would say is that Singapore education churns out book- smart students. These are the people who are best at following instructions, steps, and established methods. We're very good at following and reinforcing the paths well trod.

Coming to North America, while I did far better than my peers in strict academic settings, they would constantly do better in things such as dealing with people, creative activities etc. People here have a better sense of adventure and are willing to challenge themselves/the status quo to experience the world.

</comment><comment><USER13> What percentage of successful HN applicants are Singaporean? I know at least half (he was born there), but it could be a interesting number to know.

</comment><comment><USER14> I wonder, though, if there is a software business in Singapore that is on the same level as Microsoft, Adobe, Oracle, Google, Apple, VMware, etc, as well as the Linux foundation and FSF being present in Singapore. The US may not have the best education system, but I wonder if it is the lax education that has fostered the software industry (as well as engineering, HP, anybody?) in the US.

<comment><USER15> We're extremely good at some things but at the expense of everything else. Thus our lives generally aren't very interesting. I'm a pretty smart guy (140± IQ) who dropped out of the system when I was 15 and went through non- systematic but relentless self-education. The learning habits formed in school helped. But I was 'free'. My point is whatever the status quo, there will be a minority that will abandon the system taking along with them only the good parts and then become interesting. So with a bigger population, you get more of such minority which causes Microsofts, Googles and Apples to happen.

</comment></comment><comment><USER16> A very nice read. But are "a good schooling" and "a good learning" same? I have seen many folks with good schooling and with perfect GPAs, but most of them are only good at sitting and scoring in exams :-S.</comment>


Introducing Heka - <AUTHOR> http://blog.mozilla.org/services/2013/04/30/introducing-heka/ Mozilla Services announces Heka - a tool for high performance data gathering, analysis, monitoring, and reporting. <comment><USER2> Uh, yet another collector/grapher. That's nice but..

We have _tons_ of collectors. And tons of graphers. What we have not is a little bit of smarts in that tools. Ability to predict and ability to react.

Predict. We have Holt-Winters Forecasting Algorithm implemented in RRDTool from 2005 and a couple of papers.

React. I'm not talking about 'fix it automagically'. But everyone wants to know 'wtf was that peak on this graph last night?'. Usually your never know, except the simplest cases. Because you cannot collect everything about everything all the time. But monitoring system could enable 'collect everything we can' for short period of time when it detects _something_. Something wrong or something _strange_ , something out of the pattern. Does anybody hear about system with something like that?

<comment><USER3> We're working on it here at Etsy :)

It'll be released in a week or two. In the meantime, I've been speaking about it: [http://devslovebacon.com/conferences/bacon-2013/talks/bring-...](http://devslovebacon.com/conferences/bacon-2013/talks/bring- the-noise-continuously-deploying-under-a-hailstorm-of-metrics)

<comment><USER4> Is what you're referring to something like Growl that pops up and says 'Hey, metrics.sessions.active just dropped by 70%", or something pre-configured to spin up additional VMs/instances/dynos when some metrics misbehave? TL;DR: How autonomous is it?

</comment></comment></comment><comment><USER5> Having implemented similar solutions, it's clear to me that developers did their homework and designed accordingly. I find myself agreeing with almost every decision I could see. \- Go: light, no dependencies. This is key. If you ever deployed something in a non homogeneous environment with 100s/1000s of servers, you'd know the pain.

\- Plugin system: Only way to scale the development of the solution

\- Lua for plugins: Yes! Language is not important, but not having to stop and restart the application for changes in logic, etc. is essential.

\- Routing. Sounds great, can't wait to take a deeper look.

Kudos to devs. Nicely done!

<comment><USER6> Not very familiar with Go, could someone please elaborate on what "Go: no dependencies" mean? Thanks

<comment><USER5> Basically it means that you can have statically linked executables that do not have dependencies to other libraries, and can be deployed by simply copying the files.

Alternatives written is scripting language like ruby, python, etc. require runtimes and libraries, and it can get quite complicated to deploy them (especially if the env. has lots of different OS versions, etc.), keep track of all dependencies, deal with conflicts with other apps that may require a different version of the runtimes & libraries. As such for operational reasons it's very appealing to have a distributable binary that works without having to worry about what prerequisites are and whether it would impact anything else on the server.

</comment></comment></comment><comment><USER7> I've been experimenting with a different metrics toolchain of shh + log- shuttle + l2met recently (also written in Go):

<https://github.com/freeformz/shh>

<https://github.com/ryandotsmith/log-shuttle>

<https://github.com/ryandotsmith/l2met>

shh can be extended with custom pollers written in Go, but focuses on collecting system-level metrics. log-shuttle is a general-purpose tool for shipping logs over HTTP. l2met receives logs over HTTP and can be extended with custom outlets written in Go, but requires log statements in a specific format ("measure.db.latency=20" or "measure=db.latency val=20").

It's great to see so many new tools in this space. Previously I had a bunch of one-off "carbonize" scripts running out of cron, each collecting a specific kind of metric and sending it to Graphite or statsd. This worked OK but required quite a bit of code to get things done. Heka's plugin system looks like a nice way to structure things.

</comment><comment><USER8> Very interesting. Does this fit in conceptually with circus at all? It seems like there's a fair amount of overlap between the process/HTTP management done by circus and this stats/data collection/analysis (specifically hekad agent in the architecture diagram): [http://heka- docs.readthedocs.org/en/latest/architecture/inde...](http://heka- docs.readthedocs.org/en/latest/architecture/index.html)

I'm curious if Mozilla is using these two tools in combination internally, and what that architecture looks like.

<https://github.com/mozilla-services/circus>

<comment><USER9> Heka and Circus have very different goals. Heka is about generic data gathering, processing, and routing. Circus is about task and process monitoring and management. There's some overlap in that Circus needs to gather and process a bit of data to do its job, and it would certainly be possible to use Heka as a part of that, but we're not doing so. We'll probably use Circus to manage at least a few of our `hekad` processes, though.

</comment></comment><comment><USER10> Off the top of my head this is a reimplementation of the following * SNMP * CollectD * Carbon * JMX * WMI * CMIP

And a whole host of other proprietary transports. So its cool and looks awesome, but what does it give me that the entirety of other monitoring protocols doesn't

<comment><AUTHOR> One of the driving motivations was simplicity for developers and get a reasonable out-of-the-box experience.

This comes from a couple things.

Go compiles to a single static library so you don't have to worry about having dozens of "the right" library installed on your machine. Grab the heka binary and run with it.

This greatly eases our operations work as we have fewer dependency conflicts to deal with when we push things to production.

<comment><USER11> That doesn't make a lot of sense. You don't have to write a monitoring software from scratch just because you want statically compiled bundled libraries. You can do that with any programming language.

<comment><USER12> How do you run Python, Java, Perl, Ruby, or any JVM language without an installed runtime?

<comment><USER13> Quite easily. All offer options for building standalone programs that don't need a pre-installed runtime.

You just copy them to some directory, run them and they work.

And some of them even support building native binaries (e.g Java through gcc).

<comment><USER12> Virtually nobody in practice uses any of these.† Java binaries are in practice JVM bytecode in classfiles. Python programs are run by the Python interpreter.

Go compiles to native code. Not only do you not need a preinstalled Go runtime on a target system, but there's very little advantage to even having one. The normal way of installing a Golang program is simply to copy the binary and run it. That's powerfully simpler than most other modern programming languages, with the obvious exception(s) of C/C++/ObjC.

† _Commenter downthread says the same thing, but let me add that we look at other people's Python/Java/Ruby programs professionally, and I can't recall a single client ever doing anything like this._

<comment><USER14> With the gigantic disadvantage of security updates requiring recompiling everything :(

<comment><USER15> I've never seen an organization that didn't do a full rebuild of every build product contained in each release anyway. Usually it's just faster and less error-prone to do a full rebuild than to recompile the minimal set of source files and relink.

<comment><USER14> If one uses dynamic linking, one can use (some) system-provided libraries, which will get security updates in the usual manner.

<comment><USER15> It looks like Go supports dynamic linking to "system" libraries. At least on MS Windows this [https://code.google.com/p/go/codesearch#go/src/cmd/dist/wind...](https://code.google.com/p/go/codesearch#go/src/cmd/dist/windows.c&q=win32&sq=package:go&dr=C&l=118) call to FormatMessageW [http://msdn.microsoft.com/en- us/library/windows/desktop/ms67...](http://msdn.microsoft.com/en- us/library/windows/desktop/ms679351\(v=vs.85\).aspx) would be to an implementation in Kernel32.dll that would receive security updates.

On Linux there's a large gray area for things like libexpat.so.1 that may or may not be linked dynamically. But libc is LGPL, so I expect it too would be linked dynamically.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> Seems similar to Riemann: <http://riemann.io/>

<comment><USER17> Riemann is top of our list to be implemented in an environment made up of PostgreSQL, Memcached, Python (Django) and Go.

But as Hekad has plugins for all of the above (except Go - but I'm sure it's possible): [http://heka- docs.readthedocs.org/en/latest/architecture/inde...](http://heka- docs.readthedocs.org/en/latest/architecture/index.html)

Well I guess we'll now be evaluating whether Hekad looks like it might be a more promising fit.

I particularly like the bullet points on aggregation counters, filters and transformations. We'll have to see how they work in practise though. The docs are very pretty, but as is usual with early releases it seems a little difficult to picture the whole and how it will actually work in practise from the soup of detail that Sphinx spits out.

<comment><USER9> Unfortunately, the diagram you linked to is misleading; we don't have all of those plugins built yet. We've got a (quite rich) Python client (<https://github.com/mozilla-services/heka-py>) and a (rudimentary) Go client (<https://github.com/mozilla-services/heka/tree/master/client>) but Memcached and PostgreSQL connectors aren't yet in place. Fleshing out our plugin set (especially the inputs) is one of our highest priorities, so those should be coming Real Soon Now(tm). Contributions welcome!

</comment></comment></comment><comment><USER18> with reference to the name: "and I _do_ live in South Berkeley / North Oakland…"

I had a feeling. We may hope your code is hella tight...

<comment><USER18> I get it, no jokes on HN. This was a quote from the developer, who has, I suppose, a better sense of humor than y'all.

<comment><USER19> I didn't know we could say "y'all" on HN, either.

<comment><USER20> Why wouldn't y'all use "y'all" on HN? It's a perfectly cromulent word.

<comment><USER19> Sure it is, Ms. Hoover.

</comment></comment></comment></comment></comment><comment><USER21> i see it more as a syslog replacement. It does a lot more than syslog of course, but tit doesnt do what "collectd" and whatever else does. Heka seems to "just" do logging/routing/etc and be extremely fast and reliable doing so. And has no dependencies/small footprint.

Which is what syslog can't do.

<comment><USER9> Actually, there is a fair amount of overlap between collectd and Heka. And Heka provides mechanisms for in-flight data processing and graphing output, in addition to logging and routing. But you're also right that Heka might in some cases also be used in place of syslog.

Of course, both syslog and collectd have been around and battle-hardened for many(!) years, whereas this first Heka release is being called "0.2-beta-1" for a reason. I wouldn't go rush into replacing _any_ mission-critical infrastructure just yet. ;)

</comment></comment><comment><USER22> Off topic but I did smile to see it's written in Go, and not Rust. I guess Rust isn't there yet.

<comment><USER13> What's to smile about?

Nobody ever claimed that Rust is "there yet".

The core Rust developers all say that Rust is still in flux, and that a stable version is still many months in the future, possibly 2014. And they advise not to use it in production.

</comment></comment><comment><USER23> Is this similar to piwik?

<comment><USER9> Not really. Piwik is focused on web traffic analytics. You could build a piwik-type system using Heka, but Heka is a lower level tool w/ a wider focus.

</comment></comment><comment><USER24> seems that this DO NOT support Windows?

<comment><USER25> Windows support will be added. <https://github.com/mozilla- services/heka/issues/145></comment></comment>


Reinventing the company - <AUTHOR> http://www.economist.com/news/leaders/21676767-entrepreneurs-are-redesigning-basic-building-block-capitalism-reinventing-company <comment><USER2> The biggest impact of this change is to fundamentally change the nature of ownership of the means of production.</comment>


Ask HN:How to warn a company about the security issues if they refuse to listen? - <AUTHOR> Hello all,
While I was visiting a client, I found out a neighbor has a massive security problem with their online services. It was by luck, I didn't even use hard tools to find it. I am sure real foreign hackers wouldn't stop where I stopped after seeing everything by luck. I didn't do anything malicious, not even tried to penetrate them as I am afraid of any kind of legal responsibility.
This company is working with very large enterprises, as well as the government/defense etc.
----
I tried to contact their executives via LinkedIn, I got no response. (3 people).
I sent 5 emails to their executives after finding their email addresses from various business listing sites. Only one answered to my detailed email saying: "I will forward this email to our IT, if we need your help, we will let you know." And this person didn't even ask the details nor replied my emails any further.
---
It has been 2 weeks, they didn't do anything about the security issues they have with their software. Their incredibly loose system allowing:
-local network and all computers
-backups
-every client they ever had
-clients invoice
-manipulate data of orders and machines
-their core software Database, with full read/write possibility with no restriction or logging
-most importantly, all of their connected client's local IP addresses and so on.
---
I sent them another email today, they seem to ignore. I am extremely baffled that a company can ignore such a warning and don't take action.
---
What should I do? I wasted enough time typing them detailed emails. <comment><USER2> I'd say "forget it, move on, and delete any evidence that any of this ever took place." You stand to gain nothing from this whole exercise, while the downside risk is that you get weev'd[1].

Screw 'em, you don't owe them anything. And if they don't want to fix the issue, it's not your problem.

[1]: [https://en.wikipedia.org/wiki/Weev](https://en.wikipedia.org/wiki/Weev)

<comment><USER3> Sadly, the laws seem to enforce your position. The incentives are biased...

It is a shame that we don't have an organisation, a foundation about this subject.

A place, a website to tell such a risk for user privacy.

Perhaps the RGPD from EU can help?

</comment></comment><comment><USER4> If you wanted to try one more thing, if they are actually working with the U.S. government (and most Countries probably have similar options) there are places you can report them, generally anonymously. Contractors are required to maintain secure systems, even things you would never think of, and U.S. Defense contractors are especially at risk if they do not.

I do disagree with one comment here. I would NOT delete your attempts to warn them. You deleting this could be worse for you later, or be seen as you deleting "evidence". As long as you are not doing anything illegal yourself, and you have done nothing to harm this company than you are safer to keep the records. If you do not, and you delete them, you have no proof and they could make later claims against you. Just my 2 cents, but IANAL.

*edit fixed a word

<comment><AUTHOR> No, of course, I won't delete my messages or emails I sent. In the end, their security is so loose, it is very easy to prove in less than a minute how easy to enter their servers with no credentials even if they blame me for anything random.

I am moving on! I hope this thread helps the next person who is having somewhat similar situation.

</comment></comment><comment><USER5> Perhaps you could identify members of their technical team via LinkedIn or whoising their domain name, or others they own. You might find that the CAA record contains the e-mail address of a security manager for example. You could perhaps try to figure out their e-mail address scheme and contact members of the IT team. You probably need to get past the executive outer shell and speak to real technical people who will understand the gravity of the situation.

But aside from that, I can't think of a legal way to proceed. You could of course access customer data and then contact an important customer directly in an anonymous fashion. That'd light a fire under them but you would almost certainly be in violation of the law. The fact that you've already contacted them, presumably using your real-world identity would put you under suspicion swiftly.

But as others have said, what's in it for you? I'd personally file this under "not my problem" at this point.

<comment><USER6> Looking at the CAA record for the IODEF contact email is a great idea, but unfortunately the sort of organisations who don't have published security contacts are also incredibly unlikely to use or even know what CAA is.

Could try emailing security@, hostmaster@?

<comment><AUTHOR> I contacted someone and that person responded already as I stated in the details above. That person is a C-level and didn't even bother asking me about anything. I move on, I tried to help.

</comment></comment></comment><comment><USER7> Contact the CERT, they can help you out with establishing a line of communication: [https://www.kb.cert.org/vuls/report/](https://www.kb.cert.org/vuls/report/)

Do it anonymously, if you fear backlash.

</comment><comment><USER8> You fulfilled your moral obligation, and cannot solve the problems of the world.

Shake your head and move on!

</comment><comment><USER9> While it doesn't benefit you in the long term and you run risk of being blames as others have said. Try contacting the government considering they seem to utilize their services. I think they're much more likely to take it seriously.</comment>


Ownership and Borrowing in D - <AUTHOR> https://dlang.org/blog/2019/07/15/ownership-and-borrowing-in-d/ <comment><USER2> I've been working on a method for adding ownership and borrowing to the D programming language, and people kept asking me to explain how it works, so I wrote this article about it. I had originally thought it would be impossible to add this to D, but the more I thought about it, the more tractable the problem became.

<comment><USER3> Nice article as always. I don't think I fully grok this stuff (in other languages I've read about too). Perhaps you can help me have some clarity of thought.

1\. What should I do when I want to make a data structure like a doubly linked list or a graph - ie one where multiple pointers point to the same object?

2\. Memory is only one kind of resource where ownership needs to be tracked. Others include file handles, network sockets etc. Can you comment on whether the OB mechanism solves the problem in general, or is mainly for memory tracking?

<comment><USER4> You could make the entire thing `const` and operate in a purely functional fashion - though this approach might be absurd in the context of systems programming (I can't claim to know as I've no background in the area whatsoever.

<comment><USER5> How do you make an immutable doubly linked list?

<comment><USER2> Build it, then cast it to immutable in @system annotated code.

</comment></comment></comment></comment></comment><comment><USER6> If D manages to implement sound borrowing checking this will be huge! Brings it a step closer to matching Rust's feature list.

\- Zero-cost abstractions: Yes!

\- Move semantics: Yes!

\- Guaranteed memory safety: Yes! (in code marked with the appropriate annotations)

\- Threads without data races: Yes!

\- Trait-based generics: No!

\- Pattern matching: No! (Although like C++, in can be done as a library: [https://code.dlang.org/packages/sumtype](https://code.dlang.org/packages/sumtype))

\- Type inference: Yes! (Plus unlike Rust, you can also mark function return types auto, and let them be inferred too).

\- Minimal runtime: Yes! (the GC could be disabled if using exclusively borrow-checked code)

\- Efficient C bindings: Yes!

D also brings some features of its own to the table that Rust doesn't yet match.

\- Higher-kinded types (template template params): it's possible to implement Haskell-style monads etc. in D, if for some reason you felt the need.

\- Pure functions: these allow you to statically guarantee that a piece of code doesn't perform any IO and is a completely deterministic function of its inputs. This makes reasoning about a large codebase much easier, compared to Rust where there's no way to statically guarantee a function isn't doing any IO.

\- Fast compile times: the reference DMD compiler is almost as fast as the Go compiler, at least for code that doesn't do a bunch of compile-time calculation.

\- Compile-time compute: Rust now has constfn, but that still only supports a limited subset of the language. D allows almost the entire language to be used at compile time.

\- Variadic templates: Something C++ users might miss when coming to Rust, they allow for the creation of things like tensors of arbitrary dimension (myTensor<6, 3, 2, 5, 6, 20>) on which operations are checked at compile time to ensure sizes are compatible (so it's a compiler error if you try to multiply two tensors of the wrong size or wrong number of dimensions).

<comment><USER7> The problem with D is that it is so non-uniform. People talk about the betterC mode, but not nearly all D code written can run in this mode. Now people will talk about this ownership mode, but very little code will really use it. To become an expert in D or C++, you really need to understand what feels like a dozen different languages... and that's not what I'm looking for in a single language.

D's concept of ownership (for now) doesn't seem to have any plan to support partially moved structs, which are a major ergonomic feature.

D has organically grown just about every interesting feature ever conceived, but I would much rather use a purpose-built language, which is what Rust feels like.

I don't want a C++ that's better at being C++ than C++ is. I really enjoy how consistent and expressive Rust is. I also appreciate how intentional Go is about being Go.

A lot of people enjoy C++, and some people enjoy D. I enjoyed C++ back when Rust wasn't an option... then something better came along. D and C++ try to be everything to everyone. I like D better than C++... but I have seen no compelling reason to trade Rust for D.

Variadic templates are much better expressed by either tuples or const generics. A fixed length array of a constant generic length is the Rustic solution to tensor-like problems, and it is being rigorously developed.

Arbitrary compile time computation should be separated from the body of the program. If you need to download files or read the file tree at compile time, that should happen in a build script. Rust provides build.rs for that. Precomputing values without I/O is conceptually just an advanced kind of compiler optimization, and that's why Rust is basically seeking to make const fns only pure functions.

The fast compile times are a double edged sword, since those binaries are noticeably slower than Rust binaries, from what I've seen. I hope that Rust will one day have a much faster compiler for development builds.

I also think every sign is showing that Rust is starting to get some real traction, so I don't think I'm alone in these opinions... but they are mostly just that: opinions. You're welcome to your own.

<comment><USER8> If you don't mind, I'm curious about what "partially move structs" are? Structs have always feel like a chore to me, complicating things more when compared to maps in dynamic langs. Maybe Rust has something for dealing with the "explosion of types" issue and dealing with partial information in structs that I don't know about. Skimming through the rust book looks like Option<T> is the solution to missing data in structs.

<comment><USER7> Partially moved just means that the compiler tracks which fields have been "moved out" of the struct and prevents you from either accessing those fields or attempting to reuse the partially moved struct as if it were still a whole struct, since it is no longer whole... it has given up some of its members, conceptually.

In the article linked by this discussion, the author specifically mentions how fields can't be moved out in D's implementation.

Option is the correct approach for dealing with information that might be missing, but that's not really related to partially moved structs.

Structs document what is available in a given value, to both the compiler and to you. If that's not convincing, then I'm not going to try more here... it's off topic. But I will say you _can_ use maps in Rust or other statically typed languages. They're just not meant to be an alternative to well-defined structs.

<comment><USER9> Can Rust now handle partial move semantics on structs? I remember reading it couldn't do it before, and there were threads about how you should make small structs because of that, or that you should not use methods, because they take ownership of the full struct and not just the fields that they actually use, etc.

<comment><USER10> It can, with the big caveat that it only works well if you don't cross a function boundary.

<comment><USER9> Ah, so passing a struct as an argument to a function will still take ownership or borrow the entire struct?

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> Oh, nice. It's hopeless for C/C++ for legacy reasons, but D - that could work.

Two memory safety related things to consider. Rust needs unsafe code to do these things.

1) Backpointers. Rust's ownership system doesn't allow backpointers, at least not without reference counts. So some standard data structures, such as doubly linked lists and various types of trees, can't be coded in safe Rust.

A backpointer is defined by two objects which have an invariant locking them together. If you could talk about a backpointer in the language, and tell the compiler where its forward pointer is, you could enforce the necessary invariants. If A contains a pointer to B, B's backpointer must point to A. Any code which modifies either of those pointers must maintain the consistency of that relationship. That's checkable at compile time.

This fits well with ownership. A owns B. B's backpointer is a slave. All that's needed is type syntax which says "backpointer b.reff always points to my owner."

There are lots of interesting cases to be worked out, especially around destructors. Those are worth checking at compile time, because people get them wrong. It's really nice if you can be sure that a data structure always tears itself down cleanly when you drop the link to its root.

2) Partial initialization. Collection classes which allow growth are hard to do in safe code, because they require arrays which are partially initialized. It should be possible to talk about partially initialized arrays in the language. Maybe some predicate such as "valid(tab,n,m)" indicating that array tab is valid from n to m inclusive. You can't access an element outside the n..m range. The checker for this needs to know some simple theorems, like "valid(tab,n,m) and valid(tab,m+1,m+1) implies valid(tab,n,m+1)". Then it can track through a loop and verify that the array is initialized for the given range.

Somebody will complain that they want sparsely initialized arrays containing types that really need initialization. Tell them no.

<comment><USER12> Backpointers can be more than one step away, for example with a circular linked list, or with a directed (not-acyclic) graph. It's harder to see how to enforce these more complex invariants at compile time (but maybe not impossible).

<comment><USER11> That's where the language designer has to say "no". Trying to make ownership semantics work for arbitrary graphs is too much trouble.

I had to deal with this once writing a 3D collision detection system. Objects were convex hulls, with vertices, edges, and faces, all pointing to each other. I had an implementation in C to look at, and it was a mess. Ownership was so tangled that they couldn't delete objects.

So I rewrote it in C++, with each object having collections of vertices, edges, and faces. All links between them were indices, not pointers. Lots of asserts to validate all the consistency rules. Easy to delete, and much better cache coherence. Chasing pointers to tiny objects all over memory belongs to the era when cache misses didn't dominate performance.

So that's the answer. Some data structures are too complex for ownership semantics. So do them another way and have all the parts be owned by some master object.

</comment></comment></comment><comment><USER13> The borrowing scheme works for pointers that are passed in to functions, but not ones returned from functions As long as you don't go against the grain of the scope, you are fine. It is a natural and simple restriction that can be addressed by local data flow analysis.

The problem, as I see it, is going against the grain of the scope, a problem faced by iterators. For example, consider

        for (p = f(s); p; p = p.next) {}

won't be allowed, since f may not be able to return a borrowed pointer (like s.ptr). Rust solves this using parametric lifetimes.

In general, I am saying that returning a non-owned pointer from a function is common, and required. Am I wrong in this assumption? If not, is there an alternate architecture to get around this problem? Note that marking the pointer as const is not an option.

<comment><USER2> The solution is to have the function not return a pointer but return a ref. A ref is a non-owned pointer.

<comment><USER14> Would this be similar to passing argument(s) and return pointers/variables to a C function - or similar with assembler, reserving some registers for return values (aka caller manages memory)?

But with the (d) compiler helping enforce correctness?

<comment><USER2> Not sure what you mean, but sounds like it is.

</comment></comment></comment></comment><comment><USER15> > I've been using malloc and free for 35 years, and through bitter and endless > experience rarely make a mistake with them anymore. But that's not the sort > of thing a programming shop can rely on, and note I said "rarely" and not > "never".

Speaking as someone who often chooses the bitter path (because that's how I like it), this is an honest look at the state of things that I rarely find in articles about programming.

</comment><comment><USER5> This seems to be all about heap-allocated objects. Can the ownership machinery reason about lifetimes of stack-allocated objects at all?

For example, i would like to declare a buffer on the stack, read some data into it, make const pointers into the buffer, put those pointers in heap- allocated structs, put those structs in a vector, and do some manipulation. As long as all the heap-allocated structs expire before i return from the function where the buffer was declared, this is entirely safe, but if they escape, i'm in trouble.

<comment><USER2> > Can the ownership machinery reason about lifetimes of stack-allocated > objects at all?

It already does. If you compile with the -dip1000 switch, you'll be unable to escape references to the stack for @safe code.

</comment></comment><comment><USER16> Very interesting!

One of the key points here:

> This means that [Ownership/Borrowing] can be added to D code incrementally, > as needed, and as time and resources permit. It becomes possible to add OB > while, and this is critical, keeping your project in a fully functioning, > tested, and releasable state. It's mechanically auditable how much of the > project is memory safe in this manner.

</comment><comment><USER17> Does this mean that you can't take unique/mutable references to the inside of reference-counted objects? Is there no escape hatch, like Rust's RefCell?

<comment><USER2> You can, it's just that the RC object itself cannot be implemented with the @live checking on. The RC object can then present itself with a @live compatible interface.

<comment><USER18> How does that look like? Do I annotate it as @undead?

<comment><USER2> While I like your style, in D we do it with @trusted annotations.

</comment></comment></comment></comment><comment><USER19> I think this looks very good. The main thing though is that it is opt-in where you want it. If it became the default, or required then it would make the language difficult and unsuitable for many things, but as an option it's great :)

</comment><comment><USER20> Is the proposed embedding of ownership/borrowing into D complete? Rust has these ugly lifetime annotations which is one of the reasons I do not like its syntax. Why is there nothing like this in the proposal for D? Or why is it not needed?

<comment><USER21> Most languages with some form of GC (Swift, D, C#) that are looking into adopting some form of ownership look at it from the productivity point of view, where you would only make use of it in the hot path, the very last mile so to speak.

</comment></comment><comment><USER5> So, if i have a mutable pointer, i can make multiple const pointers which borrow from it - but i'm not allowed to use the mutable pointer while those borrows exist. Makes sense.

Can any of the const pointers outlive the original mutable pointer?

I would guess not, because you're not allowed to let an owning pointer fall out of scope, and you can't pass the owning pointer to a freeing function while the const pointers are alive.

So is there any way to start with only a mutable pointer, and end up with only a const pointer? Say i am gradually building up some object, i want to use a mutable pointer to do that, but once i'm one, i want it effectively frozen, with only a const pointer to it.

<comment><USER22> The article says that const pointers can't release their memory, so that would lead to memory leaks. (Obviously in some cases you might want to keep that const pointer until the program is finished, but it's not a generic solution to the "I want a pointer that can't be mutated" because often you do want to drop the value at some point)

<comment><USER5> That's a very good point!

I was coming from a Rust mindset, where ownership and mutability are somewhat separated. Although you can't own an object through an immutable reference, you can own one through an immutable binding. But i am slowly learning that D's model is sufficiently different that there isn't a useful comparison here.</comment></comment></comment>


Ask HN: How do you deploy a simple web project? - <AUTHOR>

I ask here as this kind of question would most likely be closed on SO...
Recently I have been setting up my own development environment using git and Jenkins. I have so far managed to initiate build and test upon committing. Now the final step is to deploy to the web server.
I don't have a single .war file or similar. I have hundreds of small files like graphics, php files, js files for node and apache configuration files.
I keep almost everything in git but I do not want everything pushed to the web. My initial thought was to just zip a folder, upload it and unzip. But this requires me to keep some sort of list for the files which are used in production and those who are not (like reference images or modules which are temp. disabled).
1) Both the js files and the php files have require directives which would let me derive which files to include. Images are referenced as well so these I could also get. Putting code together for this is however pretty time consuming so maybe one of you clever guys (and girls) could give me a pointer about where to begin?
2) How do I go about replicating/syncing DB changes from the beta DB to the production DB? I am using postgres and don't have very much experience with DBA. <comment><USER2> If you're living inside the PHP world, I'd take a look at Phing ( <http://www.phing.info/trac/> ). It's very similar to Apache Ant and uses a XML file to describe the build tasks (include/exclude files, copy, tar, SCP, run PHPUnit tests, etc.) and can easily be extended using PHP (we use the rsync extension). It takes a little while to get everything up and running, but once you've got it (and well tests) it'd pretty much bulletproof.

Also worth taking a look at WePay's blog post on how they do deployments: [http://blog.wepay.com/2010/11/30/weploy-wepays-deployment- to...](http://blog.wepay.com/2010/11/30/weploy-wepays-deployment-tool/)

</comment><comment><USER3> I deploy a simple project of mine using a horrible PHP script I wrote: <https://github.etsycorp.com/gist/391780>

My site is just static files, but it wouldn't actually be that much more complicated if it wasn't. The only thing I'd really need to add would be a line that runs database migrations. You can google "PHP database migrations" to find a handful of libraries that do this, or honestly just make a dummy rails project, and use theirs: <http://guides.rubyonrails.org/migrations.html>.

Note that the script I wrote is for a site of mine that gets literally zero traffic (although I'm hoping to get more to it eventually.) If it was something more important, I would probably start moving in the direction of Chef or Capistrano, which are more structured, and have things like error- handling.

Regarding stuff you don't want pushed to the site, it sounds like you need to fix your directory structure. It should be something like this:

      project/
      ..app/
      ....controller.php
      ....database.php [etc]
      ..public/
      ....index.php
      ....images/
      ......some_img.jpeg
      ....css/
      ......styles.css

and then the only directory that should be accessible from the internets is project/public. You deploy the project dir, and serve the site from project/public (so if I go to project.com/index.php, that corresponds to project/public/index.php on the file system.)

If you have multiple apps in one repo, you would just have them under project1, project2, then follow the same structure. If you have stuff that doesn't get deployed, it could sit alongside project in a different directory that you don't deploy.

For your requires and so on, you should be using relative paths, so that shouldn't be a problem. If you're not using relative paths, you're crazy and you should fix that. (First the being crazy part, then the relative paths part. You should also use an autoloader, so that you're not really manually requiring stuff that much.

</comment><comment><USER4> My tip for using Jenkins (or CI in general): have your build script produce a single-file artifact. You don't have a .war file, but what you can do is simply tar or zip your project. I recommend having a source directory and a build directory, and writing your build script such that the source directory is untouched and the output files are placed in the build directory. At the end, zip up that build directory and call it your artifact. You don't HAVE to do this but that's my piece of advice.. it will make your life easier.

Once you've got a stable artifact-builder, you can write a nice script that takes that file and deploys it to the location of your choice.

As you point out, some work needs to be done to determine which files are copied in the build process. I'm not familiar with PHP, but I am involved in an HTML application that has a similar need. We're using RequireJS <[http://requirejs.org/docs/optimization.html#wholeproject>...](http://requirejs.org/docs/optimization.html#wholeproject>), which has the ability to do all of the copying and optimization in one step. In our build.js file, we specify some patterns to control which files are included and excluded.

</comment><comment><USER5> Have you considered using fabric[1]? It's awesome!

[1] <http://fabfile.org>

<comment><AUTHOR> Thanks. Having a look

</comment></comment><comment><USER6> Do you know of ServerFault? The reason you shouldn't ask this on StackOverflow is that it is on-topic on sister-site ServerFault. Either you'll find a similar question, or you'll have the opportunity to ask yours.

<comment><AUTHOR> Every question I ever asked on the SE network have been closed by over zealous mods that doesn't want debatable questions...which makes it kind of useless for generic discussion. But I'll give it a try once more.

</comment></comment><comment><USER7> A simple web project? svn export, mysqldump, kick apache

<comment><AUTHOR> Ok then - a not so simple web project.

1) I can't just pull from git. The repo contains files which should not be on the production server

2) I'm using postgres - not mysql. How do you incrementally change schemas? How do you roll back in case of failure without data loss?

<comment><USER7> 1\. Like what?

2\. I know, but you _did_ ask. I wouldn't bother incrementally changing the schema for such a small project - I'd just throw the dumps in version control. I'd roll back in the same fashion.

I guess we have different definitions of 'simple web project.' I'm thinking a 100-200 hour project that's going to see 5k visits per day, max. What are you thinking?

<comment><AUTHOR> 1\. Like modules which are temp. disabled for instance. You could argue of course that these modules should then not exist in the production branch. Also reference images, project notes etc.

2\. I could do that but I'm trying to learn how to do it properly...as in I imagine there would be a better way for this. When the DB (hopefully )grows to a considerable size then I take it this approach is not feasible.

The project is ongoing and I lost track of the hours many years ago. 5K users! Ha - I wish :) I was thinking about my general project setup which is described in the initial question...I'm just wondering whether there would not be a more structure way to solve this problem.

<comment> mh- you fork the branch and have one that is 'deployable'. every time you want to do a deployment, tag it with an incrementing version number.

checkout said tag into apache's webroot.

for managing migrations, I don't have specific experience w/ PG but this looks decent: <http://www.liquibase.org/home></comment></comment></comment></comment></comment>


Ask HN: Please review my site "Smoke Signal" - <AUTHOR> http://www.getsmokesignal.com <comment><USER2> I appreciate a good hack, but just can't get past the idea that this is a solution in search of a problem.

2 Reasons I would never consider using this:

1\. I don't want anyone to have any idea "how busy I am". Maybe I'm old fashioned, but the size of my inbox, like many other things, is no one's business but mine.

2\. This effectively makes the sender the gatekeeper for deciding what's important. I want to be my own gatekeeper. I would much rather have everyone send everything when they would normally send it and let me decide when or whether to read it. I can't think of any good reason why losing control and losing data would be advantageous. I'd rather figure out ways to manage my time and my inbox than wonder what I'm not receiving because someone else made a decision "on my behalf".

<comment><USER3> "I appreciate a good hack, but just can't get past the idea that this is a solution in search of a problem."

I had exactly the same reaction: good hack, where's the problem?

The solution to the problem of too much email already exists, and that solution is ... email. Email is asynchronous, and you get to decide when and what to do with it.

<comment><AUTHOR> Overflowing inboxes are the problem. Perhaps we should have provided more context about what we're trying to fix : )

These guys do a good job: <http://emailcharter.org>

We're trying to provide a framework around that first rule of respecting the recipient's time.

<comment><USER4> But respecting people's time isn't about knowing how much e-mail the person you're sending to has...

It's about sending only important e-mails/"not spamming". So, regardless of whether the guy I'm sending to has an empty or an overloaded inbox, I should always send the e-mail, because it's important.

<comment><USER5> I don't have an overloaded inbox, but for those who _do_ , it seems to me that they're mostly overloaded with stuff that was sent to a group rather than to them as an individual.

If the sender is even thinking about the question "Does this particular individual have time to read this email?" then the chances are that this email is already far more important than average.

</comment></comment></comment></comment></comment><comment><USER6> The design of the site is very, very good. Within a couple of seconds I knew EXACTLY what this does. Not usually the case with a lot of startups out there. That text under the logo is very good.

Having said that, unfortunately I'll join others in saying I won't use this. I'm one of hte "searchers" - my inbox is always full, but I search for right emails, instead of filing into folders and deleting.

<comment><USER7> It's true that you know exactly what the service does, zavulon... but evidently that's only half the battle. You know what it does... but you don't know WHY you need it. Nobody knows that. Because it's not written on the page; it's implied. (Never good when your brand and solution are new!)

A part of the problem here comes down not to the service you're providing, mtgentry, but what you're saying or not saying about it. So my feedback is about your customer-facing copy.

Although I love the clarity of the headline, I'd recommend you consider fleshing the headline out to address a key benefit or the single biggest point of value, possibly in a nicely sized subhead. Something like:

"Broadcast Your Inbox Health

When your team or family sees you're swamped, they'll only send you critical stuff."

A few other thoughts:

1\. "Broadcast" is a scary word. It's clear and noticeable, but it's scary. Reconsider?

2\. What's the pain you're eliminating? It's not making it so people are "less likely to email you", as you put it. We still need communication. It's just that, when we're busy, we don't want the emails we don't need. The pain you're eliminating is unnecessary emails. It seems obvious to me, but it's nowhere on the page. (Of course, I may be totally wrong!)

3\. You write about what senders/recipients can see (i.e., "It allows anyone you email to see the size of your inbox"), but you don't write about what people can't see. That's important. The details that stay hidden from others - like subject lines and sender names - are even more important, in the sensitive world of personal and business comm, than what's shown to them. Tell potential customers exactly how private their inbox will remain.

4\. People don't want others to know how jam-packed or empty their inboxes are because that says something about them. (Others have noted this already.) Assuming your product addresses this issue elegantly, you'll want to message this on your home page or in easy-to-read FAQs.

5\. An 'ideal for' line would greatly help. People need to identify. Help them.

6\. Why is Smoke Signal better than an auto-responder? Why is it better than IM statuses? Why is it more efficient or effective than the solutions the HN community is throwing out? A testimonial from a customer that covers off these sorts of things could do some serious heavy lifting here.

Sorry if that's going too far. It seems to me that there are a lot of great objections and anxieties rising to the surface in this thread. You can totally address them easily on the page.

</comment></comment><comment><USER8> Nice site, clearly written and straight to the point. However I agree with the sentiment that, if it indeed addresses a problem, it tackles it from the wrong angle.

The problem this introduces is that it's useless unless people only email you by replying. If they're replying to you it's probably important, and you don't want to tell someone not to reply or to reply later. And to expect someone to do that is unreasonable.

If someone emails you direct, they don't see your signature. So it doesn't fulfil its purpose then.

Finally, an overflowing inbox shouldn't be the responsibility of someone trying to contact you. Things like labels, filters and priority flags are all tools used by email clients to allow the user/recipient to establish a system to manage large amounts of email that is most suitable for them.

You can't expect the sender to help you manage your time better. And thus if this servie is useful to you, I'd be more inclined to think your email client isn't being worked hard enough.

</comment><comment><USER9> Visual nitpicks: your title tag says "SmokeSignal" while the rest of your site uses "Smoke Signal"; and "all others click here" should probably be "all others sign up to be notified" or something.

You can probably also safely reduce the number of fonts you're using.

</comment><comment><USER10> Isn't this effectively a way to stick a button at the bottom of my emails that says, "I'M INCREDIBLY DISORGANIZED"?

Now, within teams, I can definitely see the use - particularly if it also picked up tasks from bug trackers, tools like Remember the Milk, etc. But maybe as a Rapportive-style dashboard (and at-a-glance team page) rather than a signature - so when I email my colleague, it warns me that he's late on 3 tasks and has a lot of unread email.

<comment><USER11> Agreed. If you have nothing in your inbox, it looks like you have nothing going on, are not successful and are unimportant.

If your inbox is overloaded, then you are unproductive, overwhelmed, unhelpful, flustered.

If you are in between, it says almost nothing about you and therefore would be pointless.

I think this was probably a fun little project, but I see absolutely no sense in it- at least not the way the author intended anyway.

</comment></comment><comment><USER12> Despite whether of not I'd use this service I must say your site explains it very clearly, directly, and in terms anyone can understand so I'd say job well done.

</comment><comment><USER13> There are two huge problems with this service: trust and privacy.

Trust: a one page website is asking for access to my Gmail account. As far as I can tell, this means it gets access to everything 24/7. EVERYTHING. Holy crap. Because of the way that web security has evolved, my email inbox (not Gmail, but that's beside the point) is now the master key to my life. No way in hell am I handing a service like this the master key to my life.

Privacy: I'm assuming this is inserted into the email as an HTTP reference ("signature updates throughout the day"). If that's the case, then most correspondents won't see the image because modern email clients block 'beacon' image requests by default. If that's not the case and the image is embedded as a MIME object, then the tool is kinda useless, because who knows when a correspondent will read my reply?

If anything, the real solution is already described in the website header: "It's kinda like the AWAY setting on instant messenger, but for email". Most IM software, including Gmail, already has "online presence" notification. Perhaps that's where the real solution lies.

</comment><comment><USER14> They are onto something. Usually great stories start with a narrow, pin-point of a problem that many people have.

<http://blog.getsmokesignal.com> also shows laser focus, sparse and reflective pieces.

Their simple refocus on sender is refreshing and quite cunning.

Keep up the good work.

</comment><comment><USER15> Another take on the same problem is to send an automatic reply saying

      Your email has been received.
      There are %N emails in my Inbox before yours.
      Your email is important to me.
      The estimated wait time for the response is %M days.
      Thank you for your patience.

:)

<comment><USER16> If two people both used that automatic reply, and one of them emailed the other, it would result in the world's funniest arms race.

<comment><USER17> Or ARMMs race: <http://catb.org/jargon/html/A/ARMM.html>

</comment></comment></comment><comment><USER18> The site looks very nice, and the idea looks interesting. Another small typo: "Also until we get create a proper login system".

How do you determine what are "healthy" and "unhealthy" amounts of email? If I ignore a bunch of mailing-list type email in my inbox by just glancing at the title, I may have hundreds of "unread" messages but that doesn't mean I'm totally flooded with email. Thoughts?

<comment><AUTHOR> Great point. In future versions we may only ping your Priority Inbox, instead of everything. Would that be a more accurate reflection of your "busyness"?

<comment><USER19> There are a few shortcomings here

Having filters: Most users may use Inbox as the fall through location for emails. But a lot use filters as a way to move stuff out of the inbox to specific folders as a means to prioritize responses.

eg. My wife, business partner etc, might make it to folder important, my 2nd level priority emails go someplace else, mailing lists elsewhere and so on.

Inbox is whats left and is least priority. How do you account for whats important. What if I don't use priority inbox? What happens when I don't read the email in my inbox at all since it isn't critical to my day to day function.

This also doesn't account for a mail client use or mail forwarding from Google. Since Gmail provides a way to use a mail client or forward mail options, it means that I might read mail on my client but not report back to gmail or just read all the mail from another account.

Anyway, some thoughts to ponder over. May not be a mainstream problem since most users might not be doing what I suggested.

</comment></comment></comment><comment><USER20> The "Learn More" should be on the front-page. Or actually, the image on the stats should be. To decide on wether I'd use this, I must follow that extra link, filter some copy I don't care about, then look at the image to figure out "unbearable" means a puny number to me, making the product a bad fit.

20 emails is far from "unbearable" in my mind.

Also, making it obvious that this is based on _unread_ emails would be helpful. My immediate reaction was this was for zero-inbox-nazis, of which I know a few among friends, but the "unbearable mental weight" of seeing a list of read emails just doesn't impact me the way it does them I guess. ;-)

Other than that, yes, clever hack. But honestly I'd be afraid of the impression I'm making by broadcasting to everyone that I'm constantly swamped. "Unbearable" has some pretty overly dramatic connotations.

</comment><comment><USER21> I have one rather large gripe : The sentence "We use Oauth to look at the amount email in your inbox, nothing else." is _immediately_ followed by "Also until we get create a proper login system, we may use OAuth to get your email address".

I understand that this is a temporary situation, but you probably shouldn't say "nothing else" and immediately deny it.

Otherwise, the idea is cute, and the site is nice. However, I have a feeling that people won't want to broadcast that much information to just anyone. It's a little like adding "my desk is really untidy (or tidy, or whatever) right now" as an email signature.

</comment><comment><USER22> I love looking at new sites like this, I think it's great to get the chance to see what others are working on. It tries to tackle an important problem but has a few forseeable side effects.

The most important points I can think of...

It's placed in the signature, it doesn't apply to anyone composing a new message, which is probably a large portion of mail.

It relies on the person sending the message to decide if their e-mail is urgent or not (everyone thinks THEIR message is urgent)

Anyone replying to your mail is probably someone you are waiting for a response from, so really you NEED them to e-mail you, so you can get work done.

It would probably lead to a lot of 'queue jumping', getting phone calls starting "I saw your mailbox is swamped so I thought I'd just call to ask XYZ..."

I do love that it auto updates so that you can see the current status even on an old mail.

Maybe it would be more useful to display an auto updating sig beacon that contains autoresponder info. Your frequent contacts can see what you're up to, if you're about, at a different site, on hol etc. That's closer to the "Away" button on messenger. It would save people typing out a whole e-mail to just get a bounceback message.

</comment><comment><USER23> I wouldn't use it, but the site (which is the thing you wanted us to focus on) is clear and original. Overall, well done.

There might be a typographical error in the Privacy section: "We use Oauth to look at the amount ( _of?_ ) email in your inbox, nothing else."

(I don't mean to nitpick, but we want your site to be the best it can be!)

</comment><comment><USER24> This provides a greater benefit to the recipient than the sender.

Jack wants to send Jill an email and using SmokeSignal can send it when there is the least noise in Jill's inbox. SmokeSignal is a utility for him not her. Devise a way to implement/market SmokeSignal to Jack, in which he persuades Jill to use it.

<comment><AUTHOR> Well, the product assumes Jill is really hot. And she gets lots of email from not only Jack, but Tom, Dick & Harry as well.

We think Jill would want to use it to decrease the number of cock pics in her inbox.

</comment></comment><comment><USER25> Good Luck!

There's a little typo - _"We use Oauth to look at the amount email in your inbox, nothing else."_ \- missing OF after amount.

On the learn more page there's an extra apostrophe - "email signature that let's other"

It looks really neat. How do you deal with "out of office" situations, where people are likely to have full inboxes?

<comment><AUTHOR> Ha, I'm sure there are other typos as well!

If someone gets a full inbox while on vacation, I'm guessing they would still want others to know their inbox is full, no?

<comment><USER26> Well, you would probably want the person to know you are out of office/on vacation/not checking email, not that you have a full inbox.

</comment></comment></comment><comment><USER27> This favours people who check emails all the time (24/7 if you get international emails), and says nothing of those who read all their emails, then goes through all the work created by them, then repeat (as my mum does all day).

</comment><comment><USER28> Honestly, I like this service. While I agree with everyone's sentiments as to it addressing a problem but not fixing it, I believe it's a great alternative. There's not a "one size fits all" solution to email overload, and this allows a user another channel to express their availability.

I would only suggest allowing a user to set their own alert levels for each category-- my emails constantly go upwards of 100, 200, 300 unread at a time, but I still consider that manageable. Allow it to be customized and you have an interesting project that has some great potential.

</comment><comment><USER29> This is just a trick to be able to build some sort of social network graph based on 'reads' of email isn't it?

Nice use of google/gmail api nevertheless.

I installed it to see if it works/because it looks fun but will probably uninstall it tomorrow when i start freaking out about the privacy/security/my- outgoing-emails-being-blocked implications.

Also it said my inbox is 'unbearable' straight off the bat so presumably you just check total unread or total inbox messages not the ratio - I have a massive inbox but no recent messages that are not read right now so I feel it's very 'bearable'.

</comment><comment><USER30> I think this is really clever, I love it!

2 Suggestions: 1\. A way to control which emails this gets attached to. If I'm emailing a client, I don't want them to ever feel I'm too busy to be contacted. 2\. Allow for other measurements. In the same way most phones have a DND button, I would be great to have a manual override for days I'm busy. Also for me it would make more sense to measure how busy my calendar is vs my inbox.

Additional variation: It might be interesting to post an average response time to expect vs ples/tol/unb.

<comment><USER31> I believe that in GMail, when you compose a new message your signature is just at the bottom and you can select and delete it.

</comment></comment><comment><USER32> I can't say much about the service; I wouldn't use it having little email use. But the site itself is broken and severely overlapping for me, even when zoomed out. (mobile opera)

<comment><USER33> This is a completely serious question: does mobile opera have a large enough user base to include support for at the MVP stage?

</comment></comment><comment><USER34> I would love the ability to set the basic colors - specifically background color (including transparent).

For now at least, I find it more useful embedded on my site than in email.

</comment><comment><USER35> Very nice, but is it customizable? Could I set it up myself to say that I'm busy now, and probably won't be able to reply soon, regardless of the amount of e-mail I have in my inbox? Or maybe could it somehow relate to the how many e-mails I have sent/read in the past few hours to understand if I've been going through them? Like "he has been to his inbox for x hours now, so please don't expect a quick answer right now..."

</comment><comment><USER36> Great design and bravo for actually shipping code. But I don't think I would use it because there are definitely more than 7000 emails in my inbox but I always reply emails immediately that I know are important. What if I include some key-phrase in signature and people who send me emails with that key- phrase in subject are more likely to get a quick reply? But this is a deviation from your original idea.

<comment><AUTHOR> As mentioned in another thread, maybe there could be an algorithm that uses multiple data points to determine availability? So it would take into account that you haven't opened that 5,345th email from a year ago, and you're unlikely to any time soon.

</comment></comment><comment><USER37> My friend Eric's courteous.ly (featured on lifehacker and mashable a few months back) does something similar except it uses rolling data points to determine what "normal" is for you, as opposed to a single absolute scale for everyone. The advantage of Smoke Signal is that it has a real-time meter as opposed to making a recipient click on a link to get the status of your inbox.

<comment><AUTHOR> I actually reached out to Eric about the idea originally but didn't hear back, so we just went ahead and built it on our own : ) The only thing I'm not crazy about w/ coutreous.ly is the stats live outside email ecosystem.

Buster Benson is doing cool things too with <http://howsmyemail.com>. He provided some encouragement early on.

</comment></comment><comment><USER38> What does "size of your inbox" mean? I have over 22K messages in my inbox, does that mean I am too busy? I don't use my inbox as a "to do list," so I really don't care how many messages are in it. But, apparently, there are a lot of people who do. Regardless, I think it is totally cool you guys wrote an app that you think is useful and that you shared it with HN!

</comment><comment><USER39> I get the feeling that this is a MVP or feature test for something bigger. Because truth be told, I don't see why people would care about someone's inbox health, especially since people use their Gmail account as a garbage dump+todo list+backup. I've seen inboxes with THOUSANDS of unread email and most people I know don't archive anything at all.

<comment><USER40> _I've seen inboxes with THOUSANDS of unread email_

This is me, for years.

<comment><AUTHOR> Maybe the solution to this is an algorithm that pings multiple data points to determine your availability.

<comment><USER41> You mean like this one?

<http://www.wuphf.com/>

</comment></comment></comment></comment><comment><USER42> Cool idea but I tend to glance through every email as it comes in and either respond, do nothing or mark them for a later action (flagging, etc) so it doesn't quite fit into my workflow.

On the other end of this, there are definitely times where I've wondered how busy someone I'm emailing was. I'd enjoy being able to quickly gauge their status.

</comment><comment><USER43> I must be a truly mean person. My first thought was "I can know when I have spammed them exactly enough"... I think I would personally make a game out of trying to keep people's inbox completely full. Like I said... I'm prolly just a mean spirited person.

</comment><comment><USER44> The chances of me typing my Gmail password into a page with that many typos are extremely low.

</comment><comment><USER45> I think this got a lot of attention because a lot of people here have a ton of email but ultimately this doesn't seem like a solution to that problem.

</comment><comment><USER46> I'm curious. Out of the total amount of people you surveyed before building this, what percentage raised their hands and said they would use it?

<comment><AUTHOR> We're counting hands now on HN. It's very much a MVP.

<comment><USER47> What does MVP mean in this context?

</comment></comment></comment><comment><USER48> I'd find this useful if it would update my IM status rather than adding a postscript to outgoing emails.

</comment><comment><USER49> Completely unrelated, but how does that Museo Sans render so nicely on Win/Chrome? Usually font rendering on Chrome is horrible. Now, checking Typekit, it seems some fonts have nice anti-alias, while some not. Where's the difference?

<comment><USER50> I believe that is due to the work they explain in this blog post: [http://blog.typekit.com/2011/07/26/new-from-typekit- improved...](http://blog.typekit.com/2011/07/26/new-from-typekit-improved- font-rendering-on-windows/)

<comment><USER51> This and the fact that Jos, the Museo designer, has always been _very_ web- oriented and paid a lot of attention to the rasterization issues. His fonts are all really well hinted to begin with, and then there is Typekit's conditional .ps serving on top of that.

</comment></comment></comment><comment><USER52> I'd pay just to have it always say: my inbox is unbearable.

<comment><AUTHOR> Haha. The problem with this is people would get used to it always being unbearable. And they they would't trust it.

</comment></comment><comment><USER53> Solid work guys, I'm in

</comment><comment><USER54> i like the site. i would prefer a more passive indicator, that indicates my status in a less strident tone.</comment>


Ask HN: I need some clarification. - <AUTHOR>

Are computer engineers and programmers the same? I'm a bit confused. <comment><USER2> _Engineer_ is usually stated as either software or hardware. Just _computer engineer_ is a vague term, but it probably means _hardware_. Programmer of course always means this person works solely with software.

<comment><AUTHOR> When you say hardware do you mean actually making a computer?</comment></comment>


The New Browser War: Mobile Firefox vs. Opera Mini - <AUTHOR> http://www.readwriteweb.com/archives/mobile_firefox_opera_mini_new_browser_war.php <comment><USER2> Wow, this article is just living in its own little world. How can you write an article about the mobile web, and reference MobileSafari one time, in passing, and webkit zero times.

The iPhone alone accounts for ~0.1% of browsers, to opera mini's ~ 0.02%. Plus, webkit is on 30+ million Nokia devices. Even more relevant, maybe, is that webkit is actually the same on mobile devices and desktops, unlike Opera mini.</comment>