Show HN: A dead simple static site generator – just two template tags - <AUTHOR> http://tags.brace.io <comment><USER2> I'm not being facetious, but this "yet another static site generator" joins the list with 230+ other generators.

(see [http://staticsitegenerators.net/](http://staticsitegenerators.net/))

Why do we need another one?

<comment><USER3> Static site generators are the new Fibonacci generator. When you learn a language it's a fun little exercise, and possibly even useful.

Also, everyone has slightly different requirements, so everyone likes to build their own.

I will most likely soon build my own static site generator, because none of the ones out there do exactly what I want. I will most likely borrow from at least a few of the examples out there and then post it on my github so there is yet another one.

I think we're seeing a proliferation simply because it is so easy to share code these days. Imagine how many Fibonacci generators would have been out there if it were as easy to share code when those were popular (I want to say 10 years ago but maybe it was longer).

<comment><USER4> Had the same problem ourselves while building Segment.io that every static site generator was a bit too opinionated in weird ways, so we made Metalsmith[0]. Check it out, and you might not need to make your own anymore :)

[0]: [http://www.metalsmith.io/](http://www.metalsmith.io/)

<comment><USER5> Ian how does it compare to gulp? Build tools with name-plugin-name are another proliferating area :).

</comment></comment></comment></comment><comment><USER6> You could use server side includes instead, which have been a feature of web servers for about 20 years now...

<comment><USER7> Not if you host on S3, for example.

<comment><USER8> A legitimate problem we're solving by… inventing a new templating language.

Did we need a new one to do this? Absolutely none of the hundreds of existing languages could have possibly worked, so let's reinvent SSI with different syntax?

</comment></comment></comment><comment><USER9> Not Invented Here syndrome, at all? Sure, I understand wanting to use Python for templates rather than relying on an external application. But why ignore the many, many existing template libraries? Some of those libraries have solved problems which you don't realise you have yet.

Case in point, are you planning to support this 'dead simple' template language for users of your hosting site? If so, what happens if I try to include something outside the site root, in a Dropbox area which I control? [https://github.com/braceio/tags/blob/master/tags/tags.py#L13](https://github.com/braceio/tags/blob/master/tags/tags.py#L13)

<comment><AUTHOR> Fair point. Python was chosen because it's an accessible language for new programmers. As for template languages, most are very complex. We wanted something minimal.

As for that case, it won't work and we'll try to help you reorganize your content so it does. :)

</comment></comment><comment><USER10> I've been using PHP to generate static HTML pages. It's usually as simple as `php somepage.php > somepage.html` and you have all the advantages of a full featured language.

</comment><comment><USER11> Don't use easy_install.

[http://stackoverflow.com/a/3220572/2363](http://stackoverflow.com/a/3220572/2363)

<comment><AUTHOR> We totally agree, and use pip and virtual envs for everything.

However we chose python, and easy_install because it's pre-installed all macbooks going back to snow leopard. (specifically python 2.6.1 which comes with distutils needed for our setup.py file) This means for many web designers, brace-tags doesn't require that you update your python install, or really know python at all. It's the simplest command line install experience we could come up with.

<comment><USER11> Then suggest pip first. If they need pip, they can easy_install it.

</comment></comment></comment><comment><USER12> Reminded me of my go-to include method from back in the day: [http://www.moock.org/webdesign/javascript/client-side- includ...](http://www.moock.org/webdesign/javascript/client-side-include/)

<comment><USER13> Stupid question: any major drawbacks to using this method?

<comment><USER12> Lots.

The "include" file is just a js file that document.writes your html, so its not easy to make edits because you would need to do it in a big stream of escaped code.

They won't work if user has js turned off.

They are awful for seo because the includes will not be there when the page is crawled

They are not semantic for writing things like <html><head> and will throw your browser into quirks mode because your page would effectively start with a script tag.

But I used the hell out of them back when dynamic hosting was hard to come by (geocities, tripod etc)

<comment><USER13> Thanks!

I'm in the fun position of essentially being a graphic designer made to be a web designer in a stingy startup environment where they don't want to pay someone to actually code things. Another designer and I put together a very sad website, and I wouldn't mind having a system for having includes for my header and footer, but even simple concepts like preprocessing scare me off. Heck, I run scared at the mention of the command line. I guess the only real answer is to bite the bullet and learn this stuff (I do frequent HN after all, you'd think I'd be more comfortable with some of these concepts).

<comment><USER14> Yeah, "biting the bullet" is probably a good idea. As someone with a graphic arts degree who's been a "web designer" for years, I can tell you the potential for making money at anything entirely with front-end and design skills seems vanishingly small. The days when having an ftp account and Notepad were all you needed are long, long gone.

I know enough git to be able to manage the basics (pulling and pushing) and a bit of command line stuff. If you ever get into working with web frameworks in just about any language, I think those are going to be kind of essential. It's probably not going to be as scary as you think though.

</comment></comment></comment></comment></comment><comment><USER15> What's the reason for this? Why don't you just build the website using standard HTML? Genuine question.

<comment><USER16> I was looking for something exactly like this just recently. Usually I use just php include when I want to just links some files together, but felt like I should stop using php as a preprocessor if possible.

However, everything else is so complicated if all you want is simple file inclusion.

<comment><USER15> What's the reason behind not using PHP?

<comment><USER17> You need PHP installed and configured on your server/local. With this you can just use plain HTML.

<comment><USER7> In theory you could also use PHP as a pre-processor; install it locally, copy the sources to the webserver root, then use wget --mirror to extract a post- processed version of the site.

You'd still need PHP installed on your home machine, but then again, it's not like you don't have to install some pre-processor anyway.

<comment><USER18> > use wget --mirror to extract a post-processed version of the site.

or just use php file.php > file.html

<comment><USER7> Sure, but you'd need to process each file, or write a script to do it, when wget --mirror fetches the whole site at once.

</comment></comment></comment></comment></comment></comment></comment><comment><USER19> I like this very much. I used to do very similar with PHP, but I'm now a Python dev. Sometimes, just sometimes, writing plain old simple html is easier, and having a basic include would save a ton of heartache for maintenance.

</comment><comment><USER20> I'm willing to bet that it took more time to write and setup the homepage than to write the generator itself.

</comment><comment><USER21> I haven't read everything but why isn't the source like 10 lines if that's all it does?

<comment><USER7> Reading the source, it also has a built-in web server (based on Python's SimpleHTTPServer) and a file watcher to automatically rebuild the site.

<comment><USER22> So the watcher only writes files that have been edited unless there is a change to one of the repeated tag files?

<comment><USER7> I think it rebuilds the whole site - I don't see any logic for identifying the changed file and rebuilding only that.

</comment></comment></comment></comment><comment> workhere-io Is there any way you could make the watch feature not dependant on watchdog? The watchdog installation fails on pip on Mac. I then had to install Homebrew just to be able to install libyaml, which then meant I could install watchdog.

<comment><USER5> Which is why this should have been written in Node. Seriously, Python/Ruby environments+package managers are the abomination of programmer's time.

<comment> workhere-io I disagree. This is the only time I've ever had any problems with Python package managers.

</comment></comment></comment><comment><USER23> I actually found the "Highlight this" example at the top a bit confusing. Could you write "Display this" instead? Or give a better example to demonstrate conditionals?

</comment><comment><USER24> I like it! Great concept, thanks for simplifying something that should be dead easy and simple. A ruby port would be nice.

</comment><comment><USER25> Awesome! Just what I needed this morning.

</comment><comment> workhere-io Very nice and easy to use.</comment>


76% of high-performance employees say trade mastery, not money, most important - <AUTHOR> https://medium.com/@wbelk/76-of-high-performance-employees-say-trade-mastery-not-money-most-important-in-career-decisions-e0c457884d2e <comment><USER2> What a weird setup for a false dichotomy.

> My latest data shows that 76% of HPEs are not primarily motivated by money. > But why?

When you come across a peculiar result, "But why?" shouldn't be the first question you ask. Maybe more like "What have I missed? What am I not accounting for? What am I conflating or grouping together? What assumptions did I make, and did I allow my respondents to make any implicit assumptions?"

Did the author ask what the cutoff is for money? Is it non-zero? Is he suggesting that his data shows that 76% of HPEs would rather be starving artists with great recognition? Or is there an implied "gobs of money" that's already on the table? I'm guessing the latter.

There is no acknowledgement that "not motivated by money" and "not motivated by more money" are two very different things. The way he phrased the question, there's no way to parse out what's implied. He simply asked:

> Are you motivated more by mastery of skill/craft, or motivated more by > earning money?

Lots of people may answer one or the other for very disparate reasons.

> The mysteries are hard to explain.

Or maybe the author crafted the same poor questions that usually fill these surveys. The data he gathered is probably useless.

There are no profound mysteries here. Just the average tea leaves reading.

> an HPE's connection to their trade resembles more a mysterious spiritual > illumination and growing devotion than it does an evolution of practical > decisions aimed in a concise direction.

 _Tea leaves._

<comment><USER3> And when you ask this sort of question people will lie about how important the say money is.

<comment><USER4> Yes. Whenever you're collecting feedback from a person (or group of people), their own self-image and ego is _by far_ the most important factor in their responses.

It would not even be considered a lie by most. There's just not necessarily any relationship between their self-conception and reality. People are terrible at assessing their own motives (and from this arises marketing, whose goal is to program the target to believe they desire a specific product/brand).

Most people do not see themselves as greedy, and I would guess the respondents to this survey are not in dire financial straits, so they wouldn't make an exceptional circumstance override for themselves (assuming they're the type who'd take such a survey seriously enough to consider that in the first place).

The question, essentially, can be interpreted as "Do you consider yourself noble or non-noble?" Of course, most people consider themselves noble.

This same ego-driven self-narrative is the reason that someone can take a lot of hollabaloo, dress it up in gaudy language, throw in some charts and equations to support the pre-conception, and get people to believe it's insightful and credible.

</comment></comment></comment><comment><USER5> The thing that's so weird about a Late Capitalist society like the U.S. is the amount of time spent ritualizing inequality into a quasi-religious phenomena. The lower classes have no desire for wealth, but instead an ascetic mastery of whatever lot the divine order of the market has handed them. Meanwhile, our gilded class of saints must be free and untroubled by worldly concerns(mostly taxes), so they can harness their benevolent energies towards curing the ills of we small mortals. I guess it makes sense given our history of religious nuttery, but I never expected to live in such a "mythical" world.

<comment><USER6> Why would high performing employees with office jobs be "lower class"? As others mentioned once you hit a certain income threshold and job security, then you can start prioritizing the parts of the job you enjoy. This is who the article is talking about.

This means keeping a $60k job instead of sacrificing your happiness for $90-100k.

That's hardly quasi-religious phenomena. It's a luxury of skilled people living in a western society.

If anything it's the result of the push back _against_ capitalism, such as the type of comment you just made. We're all told since we're kids to do what we love. And to since the late 1980s this anti-consumerism Fight Club-style mantra has been pushed hard to the point it's basically mainstream now, which is why marketing is so hard these days, even kids see through ads and demand authenticity.

The primary issue of inequality is largely the result of the fact that ~90% of recent job growth since the 2008 recession has been temporary/contract jobs, with little job security. These aren't the type of people who are valuing 'mastery' over money'. Middle class job growth is largely dead. And big incumbents dominate markets and global economic systems push wealth to a few. Entrepreneurship has also declined recently. There's plenty of reasons.

I don't suspect it's some cultural, original sin, type of thing that we should all feel guilty about.

<comment><USER5> >Why would high performing employees with office jobs be "lower class"? As others mentioned once you hit a certain income threshold and job security, then you can start prioritizing the parts of the job you enjoy. This is who the article is talking about.

Because they're foolish enough to believe that themselves in solidarity with the oligarch class, when really they're only temporarily useful to them.

If you think "high-performers" are part of the elite or are going to escape from this neo-feudalism unscathed, well, enjoy this sermon.

<comment><USER7> >Because they're foolish enough to believe that themselves in solidarity with the oligarch class, when really they're only temporarily useful to them.

Not everyone takes the Marxist view of society in which we're perpetually locked in a class struggle, with enemy classes and those with which we're "in solidarity".

<comment><USER8> I don't think it makes any sense to call that a 'view' \- other than the trite philosophical sense in which everybody's worldview is their own. Not sure what part of Marx's analysis of class struggle would actually depend on personal opinion in any meaningful way.

<comment><USER7> Because it doesn't reflect reality? Do you really feel like you're "struggling" with other classes?

<comment><USER9> >Because it doesn't reflect reality? Do you really feel like you're "struggling" with other classes?

Do you feel okay in the head?

<comment><USER7> Absolutely. I don't carry the same burden of paranoia that other people seem to have. You?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> Money isn't everything, but it sucks being poor. The older I get, I'm finding money is more important. Between the costs of college savings, retirement savings, medical savings, you'd better be paying your high performance employees well. They may like their work (like me), but money still talks.

Regarding the medical savings it's a race to the bottom for employer provided benefits. I no longer have dental insurance at a Fortune 50 company. Medical insurance has increased 3x and now it's essentially a catastrophic plan with $10k max OOP. Far cry from 10 years ago. I put $600/month into HSA for a family of 4. Been doing this for several years and still can't save up the $10k. The damn OOP is now higher than the max HSA contribution.

Whenever I do get a raise, it just goes into another expense for some other benefit that has been cut.

$17k/yr 401k max * 2 people = $34k

$12k/yr edu savings * 2 kids = $24k

$7.2k/yr HSA contribution (that's a fucking car payment).

$26k/yr mortgage

It all adds up.

<comment><USER11> I can appreciate what you are saying, esp with health care.

However as I grow older I find money matters less to me (and not because I have a lot of it), I would just much rather ENJOY my craft. Crazy deadlines, horrible tech debt, bad management, are all things I have been thru and do not wish to repeat.

"Life's too short to be in a hurry" \- batFastard

<comment><USER12> I'm sort of experiencing that now, and not in a good way. I'm out of work ATM, and so when I work on something technical, I work on it because I want to and when I want to.

I have found surprising pleasure in having the luxury of stopping progress at an interesting point, and exploring what's around what I'm working on, because I have the time and I'm not required to produce a certain thing by a certain date.

For example, yesterday I followed my nose on control characters, the history of which are absolutely not important for or relevant to what I'm working on. Even though I'm old enough to know, I didn't know that the null character was used as a spinning no-op to give electro-mechanical teletypes time to return to the home side. Right there in 'man ascii', the very first character has a history, that goes back to the 1870s (Baudot), or even the 1600s if you like Bacon.

You'll have to follow your own nose to get past this link to Bacon. It's not that far. [https://en.wikipedia.org/wiki/Null_character](https://en.wikipedia.org/wiki/Null_character)

That isn't directly craft-building, but it does contribute to an appreciation for my craft.

Disclosure: I am not an HPE.

</comment></comment></comment><comment><USER13> Could it be because they're already at the highest earning brackets?

</comment><comment><USER14> Another angle to this beyond the data being useless because of how it was collected.

High performance workers likely recognize that skills get them paid, so the opportunity to get better skills should always come before money, if you want to earn the most money.

Example: A young engineer is offered a job at MSFT at $100k per year being a cog on a team doing maintenance on an existing product. Or they can go to a startup for $60k a year doing cutting edge development of an innovative new product. Clearly the second opportunity likely has the best career benefits, and probably the highest career earnings.

<comment><USER15> I would personally go with the first option, in your example. "A bird in the hand is worth two in the bush."

How do you imagine the better career earnings that come from the 2nd offer? At the next interview, they ask him, "what was your previous salary?" Then ten years, five companies and five frameworks later, he (if lucky) finally matches his MSFT competitor at 130k.

<comment><USER16> Can confirm. I've been living that life the past decade. Worked for two startups that unfortunately didn't succeed as employee #3 for low wages (~$50k) in my 20s, because they seemed like great opportunities (and to be fair, I did learn a lot and I am proud of a few of the products that came out, even though they weren't successful) and I'm still struggling to get my wages up anywhere close to what gets casually tossed around as 'easy to get' here on a daily basis.

And pretty much every single company I interview with makes sure they ask what my previous wage was before giving me an offer, and surprise, surprise, the offer they give me is only about 10-20% higher than my previous wage, and waaaay below market.

I'm not in SV though, so wages are a little lower here on average anyway.

</comment></comment></comment><comment><USER17> It's not explicitly stated but reading this I get the feeling the idea of "trade mastery" is centered around the individual when reading this post. Personally the most significant developments in my career and skills have been when working with others who are better than me. For me that means finding a workplace with skilled individuals who are capable problem solvers in their own regard (their own specialty and methods - with overlap of course). Second to that, and only by a very slim margin is that in such a workplace I would want be working on an interesting product/ service.

So prefacing this with the fact I am currently on a good salary. Would I take a pay cut to work in somewhere where I am more closely surrounded by superlative talent? Fuck yes I would.

</comment><comment><USER18> > 76% of HPEs are not primarily motivated by money.

"Primarily" is a pretty slippery word here. So they _are_ motivated by money, but motivated more by mastery? In that case, how much more? Is it close?

Also, money has diminishing marginal utility. The first $50k of your salary is worth more than the next $50k, and so on. So how much are these people already compensated? If they are the top performers, chances are they are already the top earners too. How much do you have to earn before marginal mastery is worth more than marginal money?

Finally, how do you make this actionable when hiring? If you offer me more salary, I fully trust I will receive it. If you promise me greater mastery (or autonomy, challenge, better peers, making-the-world-a-better-place, etc), I will tell myself that everyone says that. Anyway, I've learned that good work is correlated with good salary, so seeking high compensation is a trustworthy proxy for seeking better mastery. As an employer, how would you answer that?

Of course there is also the question, To make his comparison, how is motivation even quantified and measured? The truth is his whole survey is suspect, but it's interesting nonetheless to see what a willing suspension of disbelief leads to.

</comment><comment><USER19> OK, try paying below market rate and see how long your best engineers hang around then.

<comment><USER20> At Berkeley they are doing exactly that. If you've ever seen the movie "At Berkeley" there's a scene where the university president discusses that very issue, the University of California system cannot hope to match the salaries offered by the private universities. It would be instructive to go over the list of who stays and who decamps to Stanford.

<comment><USER21> Wow if people go to Stanford for more money I can't imagine how low Berkeley pays.

</comment></comment></comment><comment><USER22> In a simplistic sense, the "esteem" and "self-actualization" levels of Maslow's hierarchy of needs: [https://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs](https://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs)

<comment><USER23> Or in the even more simplistic Herzberg's dual-factor theory: Money is just a hygiene factor.

If you have not enough, it will negatively impact job satisfaction and motivation.

OTOH if you have enough, it doesn't raise job satisfaction or motivation.

</comment></comment><comment><USER24> Meanwhile their bosses retire in their thirties and do whatever they want. Funny people

</comment><comment><USER25> This is what matters to my job satisfaction:

1\. Fully remote 2\. Great pay 3\. Developing for a platform I am passionate about (iOS)

I am fortunate enough to have all three of these things right now, but anytime I've considered making a job change, being fully remote is the requirement that continues to surface as the most important thing to me (and my wife :).

</comment><comment><USER26> I thought the latter part of the article did a good job of getting out of standard incentive-thinking.

Why is someone good at doing something? Maybe they've responded to incentives to develop themselves to satisfy market desires. But it seems more likely that the person has themselves been part of some positive feedback cycle of self- development. You can call that feedback cycle "passion" or "a love of the craft" or "flow" or "talent" or a bunch of things – and there probably are many distinct reasons to enter into that cycle, they aren't just words for the same thing – but in the end there was self-motivation and a personal desire for improvement. Why would that stop? If you got to be good through that motivation, wouldn't you want to keep satisfying it?

</comment><comment><USER27> Once you already have all the money you need it turns out not to matter as much anymore. Not surprising at all.

</comment><comment><USER28> People have written books about this stuff (the field is called Organizational Behavior) but in classic Sillicon Valley fashion we have to reinvent the wheel. Higher pay will rarely attract employees, but it will prevent them from leaving. Low pay will increase the odds that other reasons (lack of motivation, work, environment) will cause an employee to leave.

</comment><comment><USER29> This study is suspect. First, using self-identification as high-performance is already troublesome. Second, the author never defines what an HPE is, and the most concrete specification is from this article they backlink to:

      >For example, in a software or tech company they would be:
      > Software Engineers
      > Data Scientists
      > Visual Designers
      > Structural & 3-D Prototype Designers
      > Narrative Developers

This certainly doesn't agree with what almost anybody else uses to define high-performance employees.

Third, the question they use to resolve this is from their survey:

      >Are you motivated more by mastery of skill/craft, or motivated more by earning money?
      > Mastery of skill or craft
      > Money
      > Other

I don't think we can draw any conclusion from the fact that 76% of the people who answered this public google form chose 'mastery'.

</comment><comment><USER30> The headline can be true, if you have financial guarantees to maintain a healthy lifestyle and also connections that ensure your trade mastery is actually employed.

If not, your psychological condition may deteriorate for the first case and your trade mastery may not have the perceived value in the second.

As always, it's a little bit more complicated.

</comment><comment><USER8> Trade mastery really does feel wonderful. But its important to remember that in the context of _employment_ , it doesn't matter at all unless you're allowed to practice it. Every team I've been on for the past 15 years has systematically put figurative ball-and-chains on every developer, regardless of seniority. It's spun as 'engineering discipline' but that's typically a joke, and really the management is just nervous about commits in general.

Without autonomy, mastery is just a private thing you have, to use on personal time.

</comment><comment><USER31> "My latest survey data shows that 76% of high-performance employees say trade mastery is more important than money when considering career decisions."

"My latest data shows that 76% of HPEs are not primarily motivated by money."

It seems unwise to just assume, without even saying so, that what people say motivates them is what really motivates them. People are not actually very good at understanding their own thinking, and there are countless examples of people (sincerely!) stating that their motivations are X while their actions reveal it's really Y.

</comment><comment><USER32> All my other comments have been said, apart from: what the heck did the bit about karma have to do with anything? If it'd said "Jesus is the reason you're born to your parents" rather than karma, I'm pretty sure that would've rightly attracted some anti-proselytizing comments. Karma or "the universe" aren't any less religious ideas - are we just trained to be offended by some things and not others?

</comment><comment><USER33> The question on the survey was an either/or question. Do people pick mastery over money when faced with this question because they don't want to admit that money matters more? I picked mastery because I've already been in what I considered a high-paying dead-end job. I was miserable, but making money still matters a lot to me. I would (already have) picked a lower-paying job that was more rewarding in other ways. Never regretted it.

</comment><comment><USER34> That survey feels like the sort of thing I've filled out to get a temporary free trade publication subscription.

But what's interesting to me is that my current situation has enough twists to it that I literally could validly answer with several different conflicting choices on a number of those questions.

So... I'm not going to fill that out - doing so would induce too much stress against my internal need to be accurate in my answers.

</comment><comment><USER35> Look at what people do, not what they are saying.

They are motivated by all the great things money provides (nice family life, nice house, travel, health care)

That 78% of respondents are brained washed to repeat "do it for the passion/masterery/unicorns".

Show me one of these 78%-ers who will not work like crazy for a million dollars in a single year or two

</comment><comment><USER36> In a similar vein, this post on worker satisfaction found that these 8 metrics can predict 70% of the variance in overall satisfaction at work. Quality of coworkers was by far the highest predictor.

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

</comment><comment><USER37> The marginal benefit of money decreases the more money you earn. Each extra dollar earned is less valuable to you than the previous dollar earned. Eventually the costs of earning that dollar in time, stress, etc. overpower the benefits of the dollar itself.

</comment><comment><USER38> Who would want to come across as a greedy monster instead of someone who loves their work?

</comment><comment><USER39> Maybe it's because most high-performers are mostly well paid (and sought after). Assuming this, they are no longer chasing the 'money' since they already get it as a side-effect of they add to the projects they are part of.

</comment><comment><USER40> Trade mastery also equates to future money on a scale which may render quibbling over an extra ten grand of current compensation meaningless. Failing that, it at least helps secure future employment, which still translates to money.

</comment><comment><USER41> Reminds me of the video/book from Daniel Pink on Drive [https://www.youtube.com/watch?v=u6XAPnuFjJc](https://www.youtube.com/watch?v=u6XAPnuFjJc)

</comment><comment><USER42> Don't kid yourself, - its because monetary reward is already implied.

</comment><comment><USER43> I have asked the wife on several occasions if I could get out of software and take a job doing something else for less money. I am tired of software... at least in the corporate space. Don't get me wrong I love writing software.... but the general incompetence of corporate software development has killed my spirit.

I am a web guy whose primary job is at a major dot com and here are the problems as I see software generally.

Good web developers are hard to hire. They tend to be equally in demand compared to their Java counter-parts in the corporate space, but there are something like 11x more Java positions. The reason is because Java developers are easier to find. This creates several problems.

Since good web developers are hard to hire your choices are to retask a Java developer without training or hire a web developer that isn't good. The results are similar: cutting corners until you are drowning in tech debt and then blaming someone/something else.

Higher salaries won't solve this problem because it takes time and practice to get good at anything, but demand for skills in the workplace are immediate. Contrarily, higher salaries without solving for the missing skills (the primary cause of the problem) just encourage under-qualified talent to more vigorously defend or fight to attain positions they are not entitled to hold. The phenomenon is so incredibly common it has the name imposter syndrome.

The primary difference between a good developer and a bench warmer is confidence. A good developer is going to care far less for playing politics and defensiveness. If it doesn't work out for a good developer they can go get an equally sucky job somewhere else and probably make more money, so the motivation for politics is largely lost. Less good developers do not have such confidence that they can quickly acquire another position elsewhere or are holding their current positions for reasons not directly related to their craft, such as seniority entitlements.

As the previous paragraph eludes to the real difference between good developers and everybody else is motivation. When you are primarily motivated to merely retain your employment you will perceive your place in that environment far differently. These guys will do everything possible to not rock the boat if job stability is everything. It also means that technical competencies at the job should normalize into some happy medium so that you aren't exposed for being an imposter.

The reason why the incompetence is so pervasive is because demand is crazy high and without regulation of any kind. In almost every other professional career there is regulation, typically licensing. You cannot be a doctor, lawyer, real estate agent, engineer, pilot, and so forth without a license. You can be a politician though.

After doing this for several years in the corporate world I am really tired of the stupid games people play. Since I have two simultaneous careers in separate unrelated industries I can really see the dysfunction that many people happily tolerate every day. I am ready to do something else like become a teacher or make my secondary career my primary even though this means less pay.

</comment><comment><USER44> ha yeah none of them are to do the same job in Poland for 1/5th the wages. its like the question itself means something else to most people, in order for them to say "no" to it, but every onlooker could see a clear relationship to money.

</comment><comment><USER45> Okay, now ask the _highest-paid_ employees what is most important to them.

Compare.

</comment><comment><USER46> Maybe, but how many of those high-performance employees are already making buttloads of money? How many of them are just scraping by around the poverty line? It's pretty easy to say money isn't important when you already have it.</comment>


Show HN: SVG rendering engine for Unity - <AUTHOR> https://www.assetstore.unity3d.com/en/#!/content/19822

<comment><USER2> "SVGAssets is a runtime library for reading SVG files and render them on Texture2D objects."

Neat, but, wouldn't it be awesome to have access to the actual vector data within the SVG as well?

Rasterizing an svg is trivial if the user had easy access to this information... As well as doing all kinds of other really cool stuff with the shapes, lines and curves.

Really cool though.. Good luck!</comment>


Why We switched from Python To Go - <AUTHOR> https://medium.com/@tigranbs/5-reasons-why-we-switched-from-python-to-go-4414d5f42690 <comment><USER2> > #2 Static Type System

It's really weird to see one of the reasons for their switch to Go was because it's a statically typed language. If you want static typing, you don't choose Python in the first place. You know it beforehand and it shouldn't come as a surprise for you.

> For example it has http, json, html templating built in language natively

So does Python with urllib and json modules. I don't know if it has HTML templating in the standard library, but you can always use jinja2.

> Great IDE support and debugging

Not even a mention for the excellent PyCharm or so many of the useful Python vim plugins?

<comment><USER3> > It's really weird to see one of the reasons for their switch to Go was > because it's a statically typed language. If you want static typing, you > don't choose Python in the first place. You know it beforehand and it > shouldn't come as a surprise for you.

It's weirder that many Python/NodeJS switchers cite this reason, since out of all the commonly used statically typed languages, Go has the second weakest type system (the first place obviously Goes to C).

With so many methods returning an _interface{}_ , you'll get exactly the same crashes you had with Python.

If type safety is really such a major issue for you, you'll get a significantly better deal from Python Type Hints (using mypy or PyCharm) and TypeScript/Flow. All of them support generics (and hence nearly eliminates the need for wildcard types).

I suspect performance and static binaries are the real reason for most of the cases of projects switching from dynamic languages to Go.

<comment><USER4> If you really want good static typing while being fairly python like, there are other great options. Java or c++ both have decent generics, speed comparable to go, great libraries and years of collective experience using them.

I truly hate the social hacks that are causing go to displace much better languages.

<comment><USER5> It's the learning curve. If you know another imperative language, you can grasp golang in a week. With C++ or Java, you need months.

<comment><USER6> Java is pretty darned graspable, at least I think it's way closer to Go than C++. What do you think are the biggest things that make it hard? The language? Warts like int/Integer? Library size or organization? (This is a real question, I can't look at this stuff with "fresh eyes.")

<comment><USER7> For me? The environment/runtime.

I can write a simple program in C/C++/go/rust/etc, and compile and run it.

In Java, a bloated IDE isn't just a recommendation, it's practically a requirement.

Evey time I try to learn Java, I smack my head against the toolchain. I ended up just giving up when I tried to wrap my head around classpath, and haven't tried since. I could probably figure it out pretty easily now, but I just don't see any allure in learning Java anyway.

One of these days, I might start using Clojure, but the JVM just feels so messy that I don't want to start.

<comment><USER4> There is no requirement to use an ide in Java. I've never written Java in anything other than emacs and never had a problem.

<comment><USER7> I'm likely overstating the problem, but that is my experience as I remember it.

My main point is that Java just isn't appealing enough in the first place for me to _want_ to deal with the relatively insignificant issues I ran into.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> I've tried moving one of my projects from Django to Go before. I must accept that I had to wire a lot of stuff in Go, that Django handled for me like a cake. I'm talking about configuration, patterns and common features.

Others who've been where I was: how did you cope up with this? Would you be ready to move another project from Django to Go, without the mental fatigue?

<comment><USER9> For the majority of my career I haven't worked on greenfield projects. I've been debugging, modifying, and otherwise maintaining pre-existing projects. As a result I've grown to really dislike frameworks that autowire things together. The very same features that made it easy to get started make them harder to maintain going forward. It turns out following the code in your own codebase is easier than following the code in the framework.

Django isn't as bad as some in this respect, (cough, spring, cough), but it still exhibits some of the same issues regarding maintainability. Go front- loads some work so that longer term maintenance is easier. And the vast majority of code work is maintenance not greenfield development.

<comment><USER10> Just my personal anecdote, but I recently had to port the backend of one of my pet projects away from ruby due to performance issues - parsing around 50MB of string in ruby isn't an amazing idea.

So I figured the natural choices there would be go because it's new and in demand, and java because I have a couple years of java se experience.

So, figured, let's evaluate java... and I just failed to comprehend the spring stack just from googled tutorials. There's such a dense layer of magic going on in there, I'd either need to not understand most of my stack, or spend weeks and weeks reading and understanding.

<comment><USER9> Yeah, Spring is one of the worst offenders I've seen. At my current job I'm working on code written with Spring and debugging takes probably 5 times as long as it should.

</comment></comment></comment></comment><comment><USER11> Point 3

Goroutines are more performant than python threads if you don't understand the difference between a thread and a routine.

<comment><USER12> How about asyncio in python 3 and gevent etc. in python 2?

<comment><USER13> Callbacks (asyncio & gevent) are not the same as coroutines. You have to experience the callback hell to understand the difference.

<comment><USER14> asyncio and gevent are coroutines, at least in all the senses that goroutines are.

In fact, so are regular post-PEP342 generators.

</comment></comment></comment></comment><comment><USER15> Got you something faster than go, in python... switch back to python :P

[https://magic.io/blog/uvloop-blazing-fast-python- networking/](https://magic.io/blog/uvloop-blazing-fast-python-networking/)

</comment><comment><USER16> So this lists the usual stuff that people who aren't experts in any system think are good reasons to pick one or the other for.

1\. The single binary is attractive, but with modern virtualenv and wheel and anylinux wheel files this is far far less important than it would have been 10 years ago. I count this as irrelevant but probably python's library packaging is confusing to a beginner.

2\. Static types don't really help you here, yes you can run into some issues where you have an object that is a different type than what you thought it was, but this is not common and your tests will catch it for you. I'm not sure why django's orm will fail on the wrong type since SQL is loosely typed anyway, but everything django is garbage so don't use django.

3\. Performance in python can be pretty awful. Not going to argue. It's usually not too slow and you should focus on algorithms first, if you agorithm is efficient then you should be able to do whatever computation you need to render html or json for your service in plenty of time. But Python is slow sadly.

4\. You don't need a web framework for Python either, Werkzeug is a great toolkit to roll your own micro framework. So I'll just count this as lack of experience and knowledge, plus confusion.

5\. Great IDE support. I guess this is a thing people like to have, personally I think if you are being slowed down by how fast you can type or remember method names something is horribly wrong. The other things IDE's do are usually pretty pointless, at least for me, but if you feel like you need it then I agree IDE support for python is usually pretty weak because python is very hard to statically analyze. None of the more productive programmers I've known through the years used IDE's, they all used Vim or Emacs. If you feel like you need hand holding I guess IDE support would be important for you though.

<comment><USER17> 1\. There are other ways to do it, yes. But "just upload anywhere and it works" is not just for server, but for tooling. That what comes out of the compiler can be used everywhere is a huge selling point that also, unfortunately, helped PHP even though there were other ways to do that too.

2\. I could not disagree more. Just costs between int, float, int64, and double cause lots of bugs. Go makes costs explicit, which may be annoying, but does fix issues. Also lots of python code needs to check if passed args is str, or Unicode, or byte, or list, or dict, (or does, anyway, even though it shouldn't) so when someone passes in a generator when code assumed, or checked for a list, then all hell breaks loose.

4\. I disagree with the article and think that the gorilla Go router is so good that you pretty much need it. :-)

<comment><USER17> autocorrect. "costs" should be "casts"

</comment></comment></comment><comment><USER18> As with all "why we changed from technology X to technology Y", the story is that there was this or that perceived shortcoming in technology X and technology Y will be our savior and fix all our problems, or conform to our software ideology/dogma.

I used to read these things but given that I've read one, I've read em all.

The only reason people keep writing these things is blog filler to promote their company or do indirect recruiting. Surely cannot be cause anyone cares why you use a blue pen instead of a black pen.

<comment><USER19> > Surely cannot be cause anyone cares why you use a blue pen instead of a > black pen.

Actually... I think folks do care. But I also think that depends a bit on how you look at what's interesting. Some people want to use new languages or different languages for the sake of them being new or different. Others are more restrained but will reach out to a new language or experiment with it if they have some reason to assume this language can solve their problem better (for a definition of better). Others are set in stone and won't consider moving on from what they know.

What makes some of these posts interesting is when it goes much deeper and has thorough details that show how switching to a different language improved the situation for them, on the axis they were looking to improve. With actual metrics, crashes in production for example, deployment size, time from commit to deploy, resource usage etc. etc.

</comment></comment><comment><USER20> This article of full of fluff. Citing a static type system as a point for Go? Go's type system is about the weakest of any popular, statically typed language being written today. It's full of escape hatches.

<comment><USER21> > It's full of escape hatches.

For people who are accustomed to Python or Javascript this is a feature, not a bug.

<comment><USER20> It's neither, it's a bad design decision that they were forced to make because the type system isn't expressive enough.

</comment></comment></comment><comment><USER22> As an aside, the greatest thing about Python is StackOverflow one-liner solutions to common problems. How do you find your developer productivity fares in Go? To take a simple example, I was experimenting with C++ and had the simple task of "reading in a CSV". This simple C++ task does not have a nicely formatted, pre-approved, community rubber-stamped, best practice 500 green ticks StackOverflow top accepted answer (sometimes by Core Python / prominent PyCon developers) that I can just copy and paste.

<comment><USER23> > How do you find your developer productivity fares in Go? To take a simple > example, I was experimenting with C++ and had the simple task of "reading in > a CSV".

Not sure if reading data from a csv formatted file is a great example for differentiating Python and Go: both languages have a builtin csv package/module.

Python: [https://docs.python.org/3/library/csv.html#examples](https://docs.python.org/3/library/csv.html#examples)

Golang: [https://golang.org/pkg/encoding/csv/#example_Reader](https://golang.org/pkg/encoding/csv/#example_Reader)

And, errors handling put aside, both takes more or less the same number of LOC.

<comment><USER24> > And, errors handling put aside, both takes more or less the same number of > LOC.

So apart from the difference in line count they are the same line count :)

</comment></comment></comment><comment><USER25> "How we rationalized after the fact that we wanted a new toy"

There are many good reasons to switch from Python to Go, but that article misses them all.

<comment><USER26> What are those reasons in your opinion?

<comment><USER25> You identified that your code has few data parsing and manipulation, and a lot of concurrency bottlenecks after auditing your system and making measurements.

You have a lot of technical debts in your concurrency code and don't think you have the skills to solve them internally while Go would let you do it.

You have data about your deployment and weighted security updates easiness against self enclosed binaries and the later is more appealing.

You evaluated the cost of a rewrite in the current used language vs the new one, including training and documentation and it was in favor of Go.

You have embarrassingly parallel operations the market / your resources forces you to optimize and the serialization cost of data makes it impractical with multiprocessing.

You want a sweat spot between verbosity, high/low level, productivity and performances and don't mind having something average in every of those aspects as long as it's balanced.

You are aware of the cons of Go (very heavy error handling, skinny stdlib, youth of the ecosystem, etc) and it's still worth it.

You made a prototype of a basic task you had in the previous tech, with the last version of the previous tech and Go and the ratio "cost / result" is clearly in favor of Go.

You have experts in Go in your team and their talent would largely compensate the lost of the talent in previous tech.

You deeply checked Java, Erlang, C#, Haskell, Rust and JS as alternatives and your team agreed Go would still be better.

You checked solutions to your problem (e.g: for python, you tried crossbar before being sure you can't do your microservices properly) and damn, Go still solves them better.

You know how much RAM your service can afford, and spawning goroutines likes it's going out of style will be the proper ratio of easiness vs cost.

Basically all this posts says is "x is good so it's cool we have it". Good reasons to switch are never black and white, they are justified by experience and data, in a specific context, relatively to pros and cons of other solutions.

Anything else is just geeks being geeks and wanting cyber poneys. I understand that, I do it all the time. Loving your job and trying new stuff is a perfectly reasonable motive in my book

But I'm not going to write a blog post about it pretending I had technical reasons while I did clearly zero measurements and I am just quoting what other people say about Go.

The blog post sounds more like they had lunch and they said "dude, we should totally rewrite that in Go" and went for it. Then they measure a newly created service against legacy code and say it's better. Well, guess what, if you make a successful rewrite of anything with the same people, it will be better because you had the experience of the previous one.

The clue here is when they said they had less code in Go than in Python. This is clearly a red flag.

Plus if you had only 35% gain of perf from your Go system, something is wrong. With pypy only I can gain up to 800% of speed on my 2.7 system without changing a line of code. In 3.6 with libuv and asyncio you can also get a huge gain on IO operations.

Done properly, you should have way more gains from a Go rewrite. Or your problem didn't need Go.

No research has been done here.

<comment><USER27> Seriously thank you for this. So many "Python-Go" articles are indiscernible from Google marketingspeak and just sit on the front of HN without being called out. Your list of tests will be a great reference.

<comment><USER28> The lens through which I resolve Go is "it solves Google's problems". These relate to a systems programming codebase in Python and C++. Go makes clear sense for parallel contexts (though nobody has Google's problems). In other use cases, it is more or less just another general purpose programming language and the engineering tradeoffs are less obvious and the programmer ergonomics are more a matter of taste.

<comment><USER25> That's very true. In fact, for most new projects you will never reach the problems or scale to benefit from Go sweet spot. JS will give you the "one language to rule it all the web stack" benefit. Python will give you the "good for almost any task" benefit. Rust will give you the "safe bare metal language" benefit. Erlang the "unkillable service" benefit. Java the "huge pool of talent" benefit. Etc.

For Go, it's not as easy to justify it so you should spend some serious thinking time before investing on it. The reward can be great, but the cost just as well.

</comment></comment></comment></comment></comment></comment><comment><USER29> If someone switches away from Python he never used the unprecedented expressiveness of it, which is tens of orders of magnitude higher than the next best language.

One line in Python is worth several screens in the next best language.

Python can be as fast as C++ if you use all its features.

Development time is around 20 to 50 times faster than Java.

</comment><comment><USER30> That's a dumb article. Take point 5 for instance: You can code in Go with Jetbrain's IDE. Well guess what, Python has a dedicated IDE made by JetBrain: PyCharm. How is this an advantage ?

</comment><comment><USER31> A copious amount of misinformation in this article. Another _honest?_ effort from the stable of individuals with a shallow understanding of elementary CS.

</comment><comment><USER32> > Python is great and fun language but sometimes you are just getting unusual > exceptions because trying to use variable as an integer but it turning out > that it's a string.

Oh why would I get an unusual exception, if I tried doing that _without even a try except block_ _hust_ , I wonder ... must be because of the language itself and how it works.

> [static typing]

Why would you have started with Python, if you did not like dynamic typing? Also I doubt that static typing saves any time at all. It might also depend on what you are used to.

> [performance]

I am not sure what the application is for what Go is used in this case, so one cannot really talk about the necessity of speed in the authors use case.

However, the static typing example was a Django thing, so might be it is about some web app. Web apps are typically not the most performance needy things around.

Before bringing up the performance argument, one should check whether the performance of the language is the bottleneck or rather some I/O, like reading from disk, database or network (for which the appropriate libraries are responsible, like a database driver, which is likely to have similar performance across libraries).

If it is really about some calculation being done in the language itself, there are many high performance libraries available for Python, which are implemented in Fortran and C, so I doubt that in a proper setting using Go instead of Python and its libraries would have much of a lead in terms of performance. If you are doing massive matrix operations in the language itself, then it is sort of your own fault. Python is a language, which lives from its rich ecosystem. If you don't use it and look out for stuff, which could help you, then yeah ...

> [built-in http json ...]

Many of those Python has as well and since when is built-in automatically better than an available library, if the source code of the library is properly checked, before going to the official repositories? From a minimalistic point of view, one could even argue, that it should not be part of the language and that one can "customize" ones setup depending on the task at hand. If looking at the time needed for setup, it is only once a creation of some virtual environment (virtualenv, anaconda, whatever else there is) and you are done.

What happens, when there is an update to Go or a series of updates, which add a new feature, for example like Python's `async` and you want that in your application? You'd need to update your language compiler. But what if some of the so nicely built-in libraries changed as well and is now incompatible with what you wrote before? Maybe some function had a bad name and got renamed. Bam! You cannot update your language compiler/interpreter without breaking things. And why is that? Because the built-in library is not decoupled from the language itself. If it was not built-in, you could have it tell you, that it is only compatible with some version of Go. That's how it works with Python's libraries in anaconda environments and it is all automatically taken care of for you.

> [IDE]

Meh, Python got those too. I am still using Emacs amd Vim instead of an IDE. It didn't make me any less productive.

</comment><comment><USER33> Next up from The Author:

5 Reasons Why We Switched from MySQL to Postgres

Why We Switched from Postgres to Oracle

11 Reasons For Switching From Oracle To KDB

7 Reasons Why We Switched from Go to Fortran-77

Grammar errors are provided for free by The Author.

<comment><USER34> Thought the same. Plus: "Surprises" that should be obvious for everyone working with the discussed technologies...

I guess we'll have: "This will surprise everyone, but Postgres can actually handle GIS data better than MySQL".

</comment></comment><comment><USER35> From the HN guidelines:

 _If the original title begins with a number or number + gratuitous adjective, we 'd appreciate it if you'd crop it. E.g. translate "10 Ways To Do X" to "How To Do X," and "14 Amazing Ys" to "Ys."_

</comment><comment><USER36> His grammar is atrocious, yet this is one of the clearest and most persuasive things I've ever seen on medium.

I learned an important lesson about writing from this author.</comment>


EdTech Startups to Watch - <AUTHOR> http://lurnq.com/lesson/edtech-startups-to-watch/

<comment><USER2> I still doubt that online courses could be ever a replacement for that good old one on one classroom session... the discussions and interactions between good students and professors... I find there's no faster way to learn than when an expert explains something to you in person, you can ask questions there and then... clarify them and move on. In an online lecture if I get stuck... I'll have to pause, clarify my question searching on google(sometimes not easy), then get back to the rest of the lecture.

<comment><USER3> My thought is that a Ferrari is better than a Toyota. But a Toyota is about 90% as good as a Ferrari and it serves 1000x more people. And in some ways (safety, gas mileage) a Toyota does outperform a Ferrari.

<comment><USER2> loved your analogy... but you see I use Toyota all the time... just that if I have a choice between a Toyota and a Ferrari, I'll go with Ferrari if I have the resources. Anyways I love Coursera, I am taking a lot of classes there. Remember a lot of quality of a course depends on how well the teacher conveys it whether its a lecture hall or an online course.

<comment><USER4> From my experience with edX, online courses are the Ferrari in your analogy.

1\. It is easier to concentrate on a video of a lecture. My friends aren't sitting next to me, the recorded audio projects the information clearly, and noisy neighbours are no longer an issue. The recorded video means everyone can "sit close" to the lecturer, and the ability to pause, rewind and rewatch lectures means I'm more likely swallow it in it's entirety.

2\. The ability to participate from any location and at any time means I'm never late and never hungover.

3\. Getting your questions answered via email means it can be read multiple times verbatim. Plus the professor is likely to give you a more in-depth response when he can answer in his own time.

4\. My couch, lounge chair, and bath are more comfortable than the lecture hall chairs I've sat on in the past.

I feel it's more appropriate to liken online courses to the electric car. They are a more efficient use of resources, and we'll need them if humans are going to overcome the (frighteningly) vast array of current and future problems.

To all those involved, great job!

</comment></comment></comment></comment><comment><USER3> A lot of people don't realize this, but Coursera is a young startup that just had its first birthday. If you have ideas for how we can make things better, I would love to hear them.

And if you are a hacker, come join us and implement your ideas for millions of students!

<comment><USER5> I doubt my idea is one that has not been discussed in depth, but I am really disappointed that students must use their name or be anonymous, and cannot create a persona.

For instance, I have a unique name, and I'm also generally private enough not to have ever subscribed to Facebook. I don't really care about anything I've have posted being traced back to me, but I do care about the reverse. I don't want some low-level HR person doing due diligence to take a shortcut and make a decision based on a regionally unpopular position on some political issue.

As such, there are real reasons to use personas, and I believe real reasons to generally minimize exposure of one's identity online. If you later have roles as a public figure, it can be a distraction to have uncontrolled material out there signed with your unique name.

When I'm helping another participant in a course struggle through a problem, or asking my own question that to me will later seem dumb, it's easier to use something more unique than 'anonymous' when having a conversation. Otherwise, I could just not ask dumb questions, but if they really aren't dumb at all, then the answer should be easy to find on Google.

I _could_ use a pseudonym, an email address not linked to me in any other way, and if really paranoid, I could use the Tor network—but I'm not concerned about taking classes in secret, I simply want to participate as much as possible and as effectively as possible while opting out from contributing to the 'portfolio' of discourse attributed to my real-world identity. It would be naïve to pretend that the student dialogs are not interesting data for anyone to harvest regardless of user term, and that they will not eventually be as indexed and searchable as Markmail or Google's archive of Usenet.

Perhaps I'll never even refer to a certificate from a Coursera course I enjoyed, much less feel the need to display it, and I could use a handle rather than my name, but I can't help but suspect that most of the people using 'anonymous' in the forums are doing so for the same reason as me, or even just declining to contribute.

I really believe that it would be a great improvement if, like EdX, the name used in forums was different than the name attached to any certificates. And really, being a global program, and considering the attitudes with regard to academic honesty outside of the US, the certificates may not be very meaningful until there are proctored exams anyway. Furthermore I can't imagine how policing abuses by nicknames is any more difficult than people using 'anonymous', they're both linked to an account that is participating (or suspiciously _not_ participating through quizzes and watching videos).

<comment><USER3> Thanks for the feedback. Naming policies are a very difficult issue that I know have been debated at the company. I'm just an engineer, but I will forward on your comments.

</comment></comment></comment><comment><USER6> Are there any similar sites to Coursera in terms of offering actual University courses in Nutrition etc rather than just comp sci / engineering?

</comment><comment><USER7> This website looks very cool! The concept seems to be pretty similar to <http://onvard.com></comment>


Why the focus should be mass transit instead of tolls to fix traffic congestion - <AUTHOR> http://economicjustice.ca/2015/11/23/why-the-focus-should-be-mass-transit-instead-of-tolls-to-relieve-traffic-congestion-1/ <comment><USER2> Maybe I'm alone on this, but is transport only an economic matter? I am not a package, a cardboard box. I have senses and a brain which processes to some degree, and as a result I need to be transported with more consideration than a parcel. I find the London underground to have crossed the threshold from acceptable human transport. Infinite shoe-horning is not a solution. I'm aware of the various problems that need to be considered, but I think my psyche should not be excluded from consideration.

<comment><USER3> I moved to London two years ago from Sweden. The underground has really helped me get over my claustrophobia (by daily exposure).

</comment></comment><comment><USER4> This article conflates two very different things: creating new tolls on existing infrastructure, and creating new toll-funded infrastructures. The first one changes the incentives of existing users, the other one is creating induced demand for wealthy commuters. Wealthy or not, induced demand is still induced demand, and will create new congestion on the existing network.

The main fallacy, however, is the goal of reducing congestion. If we want to move trips from cars to more sustainable means, congestion is a way of reducing the competitive speed of individual vehicles, therefore shifting the incentives towards public transit.

edit: typos

<comment><USER5> Congestion, among its other faults, leaves cars idling on the roads wasting gas. It also harms some of the more common mass transit systems. For example, nobody is going to see a bus as the faster option when they're both traveling the same congested streets as the cars do.

That said, it does work sometimes. For example, if you're going to a baseball game, it's better to use the light rail than to go anywhere near the downtown traffic in Phoenix.

<comment><USER6> If you have effective bus lanes (such as in Edinburgh), the busses offer a visibly faster alternative to driving. Even at peak time.

<comment><USER7> I humbly suggest "especially at peak times".

<comment><USER8> Be thankful that Edinburgh's roads weren't "improved" in the 1960s:

[http://www.gcat.org.uk/blog/?tag=edinburgh- motorways](http://www.gcat.org.uk/blog/?tag=edinburgh-motorways)

<comment><USER9> Whereas Glasgow still suffers from its motorway plan having been left half done, leaving the city with a single motorway crossing of the river (with only two lanes, down from five as you start to approach the city!).

</comment></comment></comment></comment></comment></comment><comment><USER10> Self-driving cars are not a silver bullet for congestion, because they don't reduce the physical space required by cars. For example, the Sao Paulo 180km traffic jam: [http://www.bbc.co.uk/news/magazine-19660765](http://www.bbc.co.uk/news/magazine-19660765)

<comment><USER11> Self-driving cars are the necessary but not sufficient condition to solve traffic problems. Start with that and remove 1-person-1-car model [0], add ride-sharing software, ban human drivers [1] and done, no more traffic problems.

As for your example - this jam is a direct result of very high latency of human reaction. It causes stop-and-go in jams [2].

[0] Or it will rot and occupy parking space for 97% of time.

[1] This will likely to average speed and reduce time spent waiting for lights.

[2] [https://www.youtube.com/watch?v=Suugn-p5C1M](https://www.youtube.com/watch?v=Suugn-p5C1M)

<comment><USER12> _Self-driving cars are the necessary but not sufficient condition to solve traffic problems. Start with that and remove 1-person-1-car model [0]_

There's no need to have self-driving cars to stop 1p1c. We've already got mass transit… Switch to semi-fullly seated buses and you've reduced the number of vehicles by a factor of 40.

Besides, since everyone starts work at the same time self-driving cars will have minimal effect on the number of cars on the roads at rush hour as long as there's only one occupant per car.

Much cheaper solutions than developing and constructing an entire new vehicle fleet would be to force multiple occupants per vehicle, and to have people start work over a wider time span.

<comment><USER13> Example of the problem with mass transit : [http://www.uwgb.edu/dutchs/pseudosc/masstransit.htm](http://www.uwgb.edu/dutchs/pseudosc/masstransit.htm)

1) Money: generally speaking, depending on the number of passengers mass transit is a little cheaper (1 person), about the same (2 pers) or much more expensive (a family of 4-5) than public transport.

If you take into account that home -> work -> shopping -> home with public transport turns into home -> city center -> other city center -> work -> city center -> shopping -> city center -> other city center -> home ... The point is that there are many kinds of trips where the routes taken by public transport cause it to be more expensive than a car.

In the cities where I've worked, mass transit (2x bus + train) was only 20-30% cheaper than a car and only if you lived out in the suburbs and worked in the city. The other way around (living in city, working a bit out of the city), mass transit was more expensive than the car. Living in city, working in city, a fold-up bike was far more convenient.

2) Time: mass transit doesn't go where I live, and doesn't leave/arrive when I need to leave/arrive. Furthermore, it's regularly non-operative when I need it. This limits what I can do (I stayed late, we ordered in pizza, then hang out with a friend ... oops it's 22h30 ... no more buses to my place until 6 am. Yes it only happened to me maybe 5 times over a decade but fuck that shit)

3) Baggage limits: when using mass transit I can carry 25 kilograms. If I don't care about comfort of myself and other passengers, maybe 40-50 is possible. I don't imagine I will be able to do that anymore when I turn 60. If I have my kids with me, 20 kg is pushing it, and if I'm either slightly ill or ... I can barely take anything at all.

When I go shopping, I buy for the week at least (by far the least bothersome way to do shopping imho, a lot faster, and also 30% or so cheaper) I come home with 30-40 kilograms usually. Can't use public transport for that.

This is ignoring that a lot of things can't be reasonably/safely transported using public transport, like DIY building supplies (ladder, long bars, 2 by 4s, ...). This includes anything heavy or above a certain very restrictive size limit.

4) Comfort. I don't even get why they bother with 1st class on trains. Let's not pretend that even 1st class has 1/10th the comfort of a car. Commuter trains are torture.

Mass transit is usable as a commute solution. It cannot reasonably replace a car. We need to fix transport and mass transport as it currently exists is not the answer.

<comment><USER14> > The other way around (living in city, working a bit out of the city), mass > transit was more expensive than the car.

Do you mean the monthly cost of transit pass/fares was more than monthly cost of parking + gas + insurance + car payments + maintenance?

<comment><USER15> Our monthly numbers are

Transit passes for a family of four: 250-450 USD

or one very cheap car used for commute: 300-600 USD \+ public transport

or bicycles + public tranport: 150-300 USD a cargo bike being the most expensive part of that.

I commute 2*50 min daily on bicycle since 2013.

<comment><USER15> To be fair it's actually 2*30 min nowdays, I just say 50 min because that's what how long the commute was with the car and also how long it took me to bike when I started.

</comment></comment></comment></comment></comment></comment></comment><comment><USER16> "Instead of tolls"? Why not both? Tolls should pay for mass transit. It's a win win. Want to take your car? Good, you are then paying tolls that subsidizes someone else taking the bus. I thought almost all cities that have congestion fees use them to pay for more public transit?

<comment><USER17> Except that governments tend to _sell_ the toll infrastructure, as they did with the 407 ETR. In that particular case, it was to balance the budget for that one year, so that way the Conservatives could claim their tax breaks didn't cause a deficit.

</comment></comment><comment><USER14> Here is part 2: [http://economicjustice.ca/2015/11/24/why-focus-should-be- on-...](http://economicjustice.ca/2015/11/24/why-focus-should-be-on-mass- transit-instead-of-tolls-to-relieve-traffic-congestion-2/)

But it's just a few maps of Montreal and Toronto, so I wonder if it's a placeholder...

</comment><comment><USER18> [http://runvnc.github.io/tinyvillage](http://runvnc.github.io/tinyvillage)

</comment><comment><USER19> I know several people who have attempted to live in cities nearby. In the end, they all moved to the burbs when (a) they realized they needed good schools for their kids or (b) they were mugged.

Mass transit requires density. Density of housing and density of employment.

Density requires a level of competence in governance that many US cities appear to lack.

<comment><USER20> "Density requires a level of competence in governance ..."

And density requires a populace willing to suffer the indignities of such density too ... unless you were proposing that government should impose it regardless ... or that government can wave away those indignities.

<comment><USER19> Not proposing any such imposition.

Just noting that if city governments were more competent, mass transit would not be an issue as cities would be a more desirable place to live and work as compared to the burbs.

Whenever I see a new mass transit proposal put out by a nearby city, it seems that the major underlying reason is to have a public works project to steer money to vested interests rather than to provide useful transit.

</comment></comment></comment><comment><USER21> This article is all well and good, but the BIG problem are traffic lights. Traffic lights are undoubtedly the problem.

What can replace lights? Roundabouts. Plain and simple OR a startup that can compete with the current traffic light system.

<comment><USER22> Having seen some roundabout implementations, I'm no longer convinced. Traffic circles require a large flat space, and can't easily replace stop lights on steep hills or narrow crevasses.

A roundabout replaced a set of traffic lights at a 3-way intersection in a crevasse next to SR-18 in Auburn, WA. It's a tight fit and difficult to navigate, and trucks regularly jump the curb.

After driving it, I really wish they could change it back.

<comment><USER23> Roundabouts may work very well for self-driving cars with some short-range communications capability. Merges can be negotiated, both at roundabouts and on-ramps.

<comment><USER22> Roundabouts allow only simple traffic interactions, that's kinda the point. Nothing complicated like a left turn can happen. Why would special communication be needed?

</comment></comment></comment></comment><comment><USER24> I can't speak for Canada. In a place like Los Angeles both mass transit and carpool/toll lanes are useless.

Due to a contract I've been driving a pleasure-filled 100 miles per day on the lovely 405 freeway for a number of weeks. I'm not in a hurry, so I chill and kind of watch traffic like I'm not there.

What I see ever day is, well, ridiculous.

The carpool lane is a complete waste. It effectively removes 20% to 25% of the road's capacity without any real benefits at all. Why?

        - Cars with multiple passengers were going to have
          multiple passengers, carpool lane or not
        - Those cars were not removed from the road thanks to the
          carpool lane:  No benefit
        - Business trucks with multiple passengers? Same issue:
          They were going to have multiple passengers anyway
        - Buses:  They go slow and plug-up the carpool lane
          and actually create traffic jams.  Today I watched an
          empty bus with probably 50 cars behind it going well
          below the speed limit.  Crazy.
        - Cargo trucks (like 24 footers).  Again, same problems:
          They were going to have multiple passengers anyway,
          they are going slow and cause congestion.
        - Tons of cars with a single person break the rules and
          use the carpool lane because nothing is enforced,
          particularly at night

What's needed is a shift in mission, focus and concentration by two agencies: Caltrans and CHP. Maybe the DMV too, in that they'd have to push and experiment with new rules of the road.

Their mission should be to make the roadways as efficient as possible.

Don't pull over the guy doing 80 in the fast lane who is getting the hell out of the way. Pull over the dude doing 50 in the middle of the freeway and the nutcase one lane over doing 49.999 miles per hour who form a virtual "cork" in the road and create a pile-up behind them.

And all those people who somehow can't press on the accelerator going uphill? We must do something about them. It's unbelievable.

How about the guy doing 63.9 mph on the left lane who absolutely refuses to move over, creates a pile-up and has an asshole behind him driving one foot from his bumper?

Ah, and one of my favorites: Let's get on the freeway at 40 miles per hour because we are afraid of the accelerator or we just don't give a shit! Cars pile up, swerve around and a huge potential for a nasty accident is created when these fine folk enter our freeways.

Yes, we do have too many cars on the road, but they are also being driven in really stupid and inefficient ways, our agencies do exactly zero to improve the situation and, on top of that, lanes are taken away and road capacity is reduced for this imaginary idea of carpooling.

I really don't think our highways are being used anywhere near peak efficiency. In fact, I wouldn't be surprised if the exact opposite were true.

<comment><USER25> The people driving at a constant speed are not the problem. They keep traffic flowing smoothly, even if it is slightly below the speed limit. The ones who create the problem are those changing lanes to gain 5 mph and get to their destination one minute sooner. They cause people in the lane they move into to have to pile on the brakes, causing slowdowns which can form a standing wave and turn into traffic jams. If people would just pick a lane and a speed and stick to it the overall throughput of the road would be much improved.

<comment><USER26> This is very true. If you want to see how much difference this makes firsthand, go to Germany and drive on the autobahn. No one hangs out in the passing lane. No one tailgates. No one cuts anyone else off. Everyone goes the speed they're comfortable with.

I felt so much safer and more relaxed driving 110 mph there than I do going 65 on an American highway.

<comment><USER27> Tailgating on the autobahn is also a potential 375Euro fine and 3 month license suspension if you get caught.

<comment> saiya-jin for tailgaters I have a quick solution - hit the brakes gently. not to slow down enough to cause any incident, just to scare the idiot behind me that their precious little car will get smashed because of their stupidity. if enough people did this, I believe most would stop this d*ck-measurement activities, at least on the roads.

<comment><USER28> No thanks, I'm not getting rear ended at 70mph because I'm getting tail gated.

</comment></comment></comment></comment></comment></comment><comment><USER29> Public transportation sucks and is terrible. Yes even in big European cities. It's asking for a faster horse. Any planning not built around self driving cars is dumb and behind the curve.

<comment><USER30> This opinion is (I believe) largely a function of one's worldview: if you grew up and live in a place designed for cars, you will probably find public transit systems inefficient. Why shouldn't I be able to get in a thing at my door and out of a thing at my destination door, without all this walking and standing nonsense?

If you grew up in e.g. Hong Kong, though, you'd likely see public transit as an arterial system designed to get you from one walkable neighborhood to another. I want to be able to walk around my neighborhood without dodging cars, even pedestrian-aware self-driving ones.

The failure of public transit in many contexts is really in foundational civil planning, not the nature of transit itself.

<comment><USER31> Even if you ignore the extra walking required, and even if public transit actually gets you close enough to your destination, public transit at least doubles the travel time required. Potentially more if your drive doesn't need to deal with traffic, which it often doesn't.

Random example: in the Portland area, a city known for both public transit and pedestrian/bike friendliness, I looked up routes from my current workplace to the university building I took most of my classes in, via either a car or public transit. Despite having a train line that handles most of the distance, that trip would take at least 90-100 minutes, depending on time of day. That assumes you start your trip at a time that doesn't require waiting for the first pickup. The same trip by car would take 25-40 minutes, depending on traffic. And with a reasonably fuel-efficient vehicle, the trip would cost less in gas than the cost of the transit fare. On top of all that, you can leave when you want to leave, not worry about which bus or train you need to catch, and not worry about getting stranded when the buses and trains shut down for the night.

This isn't an issue of worldview; by any almost objective measure, a car beats public transit, here in one of the most transit-friendly cities in the country.

(In the interests of a fair comparison: public transit does work better if you don't have the option of using a car, such as if you can't afford one, or if you have some legal reason you can't drive.)

Adding more public transit vehicles or routes wouldn't solve this problem, because the current set of vehicles aren't actually at capacity; by measures of _throughput_ , they carry all the passengers that want to ride. However, by measures of _latency_ and similar metric, public transit utterly fails.

Perhaps if you somehow convinced the entire population to use public transit, then you could put many times the number of public transit vehicles on the road without wastefulness, and partially solve the latency problem. But you'd have a lot more luck convincing people to use a fleet of self-driving electric cars instead.

I would welcome a similar latency-based comparison in a more transit-friendly area, as long as the comparison shows transit infrastructure getting better to compare well with cars, rather than driving infrastructure getting worse while transit stays the same.

<comment><USER32> Aha, perhaps _that_ is the issue: if Portland, billed as mass-transit friendly, sucks this much w/r/t MT, it's understandable that people would try it and say "well if _this_ is the best mass transit can do, then no thanks."

Edit: Went to check the map - and yes, it does look very...rudimentary. [http://trimet.org/maps/img/trimetsystem.png](http://trimet.org/maps/img/trimetsystem.png)

<comment><USER33> Yeah, with that network, no wonder it's slow.

For comparison, here's Budapest: [http://www.hungarybudapestguide.com/wp- content/uploads/detai...](http://www.hungarybudapestguide.com/wp- content/uploads/detailedbudapestmap.jpg)

<comment><USER32> Good point. Prague: (caution, big PNG) [http://www.ropid.cz/data/Galleries/59/67/d1190_3_A0_PID_2015...](http://www.ropid.cz/data/Galleries/59/67/d1190_3_A0_PID_2015-11.png)

</comment></comment></comment></comment></comment></comment><comment><USER34> Fuck tolls ([http://learningenglish.voanews.com/content/personal- flying-v...](http://learningenglish.voanews.com/content/personal-flying- vehicles-close-to-reality/2843387.html))</comment>


Show HN: XML Fiddler – tool for quick XML exploration - <AUTHOR> https://masa331.github.io/xml_fiddler/ <comment><AUTHOR> Hi everybody, author here

this is simple tool i created to solve a couple of pain points i had when viewing XMLs. I often work with XMLs or XSDs from various sources and i need to quickly search through them or extract some sample data. This tool makes it a bit easier for me than viewing the documents directly through browser, which i used previously.

It already helped me a lot in my day to day work so i thought it might also help someone else. Post similar tools if you know them. I always find those useful.

Have a good one!

<comment><USER2> Very minor request: Pressing "extract" provides no real UI feedback as to what happened. Until I "discovered" the correct tab, it felt a bit like the button was not wired up to anything.

No UX expert, but would it be possible to do something that signals to the user that something did indeed happen?

<comment><AUTHOR> Hi, thanks, that's a good point. I will look into it

</comment></comment></comment><comment><USER3> Similar to XML Notepad, one of the nicest freeware mini apps ever published by Microsoft: [https://en.m.wikipedia.org/wiki/XML_Notepad](https://en.m.wikipedia.org/wiki/XML_Notepad)

<comment><AUTHOR> Hi, thanks for the suggestion. I will look into it when working with bigger files

edit: here is the repo link: [https://github.com/microsoft/xmlnotepad](https://github.com/microsoft/xmlnotepad)

</comment></comment><comment><USER4> I recently found this. Works like a charm:

[https://github.com/martinblech/xmltodict](https://github.com/martinblech/xmltodict)

</comment><comment><USER5> Decent tool, simple and easy! Glad that XML is still getting attention these days. While JSON is excellent for almost everything, there are still areas where XML excels.

<comment><AUTHOR> In my industry(accounting in a small europe country) XML is the standard which is used for any data exchange. Then CSV. I don't think i'v ever got my hands on anything in JSON. Maybe once or twice. In APIs of course but these aren't much common here yet anyways.

<comment><USER6> XML got to be the standard for historical reasons, but it's resisting very well where its superior formality and exactness give it an edge over "hip" loose formats like JSON.

</comment></comment></comment><comment><USER7> As we're talking XML and XSD, does anyone have a good open tool for diagramming XML schemas into something browseable and graphical? Looking to automatically build docs from XSD in a CI task rather than having to do it manually.

oXygen gives nice output, but it's not open and doesn't work well in a CI pipeline.

<comment><USER8> CSS. You can apply CSS directly to a schema instance in order to allow beautiful display in a browser. If you are feeling really wild you can add a tiny sprinkle of JavaScript at the tail end of the file for complete interaction via DOM walking.

Here is an example of a schema instance with CSS. Keep in mind this is literally the XSD file: [http://mailmarkup.org/mail- documentation.xsd](http://mailmarkup.org/mail-documentation.xsd)

<comment><USER7> This is incredibly cool. Plenty of food for thought. I think people would miss seeing UML type diagrams, especially for a large intricate schema.

This is what we've currently got: [http://data.crossref.org/reports/help/schema_doc/4.3.7/4.3.7...](http://data.crossref.org/reports/help/schema_doc/4.3.7/4.3.7.html)

</comment></comment></comment><comment><USER9> "Extract" doesn't seem to work, but the rest of this is simple and intuitive. Very nicely done. I wish I had this tool a long time ago!

<comment><AUTHOR> Hi, thanks. When you press Extract the extracted data shows in the Extracts tab in menu. It doesn't do anything immediatelly. That's not good UX and i'm gonna adress it somehow as someone else already suggested.

Or there were no data in Extracts after you tried to extract something? If you don't mind please open up an issue with sample data and xpath in [https://github.com/Masa331/xml_fiddler/issues](https://github.com/Masa331/xml_fiddler/issues) and i will look into it

<comment><USER9> That makes sense to me now. Even though Extracts was right there, I didn't make the connection. I assumed that it would copy the same way that the XPath is copied when that button is clicked.

</comment></comment></comment><comment><USER10> Nice! simple and intuitive, I like it!</comment>


Ghosting - <AUTHOR> https://en.wikipedia.org/wiki/Ghosting_(relationships) <comment><USER2> If you ever get Ghosted, count your blessings because you dodged a bullet.</comment>


CodernityDB — pure Python, NoSQL, fast database - <AUTHOR> http://labs.codernity.com/codernitydb

<comment><USER2> Since these questions will inevitably come up:

      - You fsync yourself to ensure durability.  I can't see at a glance
        what fsync settings are used for the speed tests.
      - It's not transactional, although single operations are atomic.
      - Indexes operate on a single-writer, multiple reader basis.
      - No traditional joins, although you can of course write
        a procedural function that joins for you.

<comment><USER3> These have come to be common features of NoSQL in general. I wouldn't be too surprised to see them here in a product marketed as NoSQL.

The other attributes i'm not too fussed about personally, i figure i can always work around them or face the question "am i using the right tool for this job?" but the fsync one still gives me the heeby-jeebies (even though it's never bitten me despite many many TBs of data).

Cassandra does periodic fsync's (although it can be configured). I understand HBase and Mongo have similar shennanigans.

</comment></comment><comment><USER4> A cursory glance through the code revealed a bug: [https://bitbucket.org/codernity/codernitydb/issue/1/_rev- not...](https://bitbucket.org/codernity/codernitydb/issue/1/_rev-not- guaranteed-to-be-unique)

<comment><USER5> You can learn a lot about a community, a product, and a company based on how they respond to bug reports. Promptness, formality, details and politeness are all incredible indicators about what's going on under the hood.

<comment><USER6> And what did you make of their reply?

</comment></comment></comment><comment><USER7> "CodernityDB pure python, NoSQL, fast database"

Is the fact that it is written in "pure Python" really the _most_ important thing to reenforce after the name of the product itself?

Why would I use this over established products like Riak, Redis, MongoDB, etc?

<comment><USER8> Python is on almost every host out there now. Riak, Redis, and MongoDB are not, and on many hosts you won't be able to compile them from the source. So yes, that's relevant.

<comment><USER9> If you are on a host without a compiler you don't need a NOSQL db.

<comment><USER8> How do you figure?

<comment><USER10> I believe the insinuation is that if you're actually building a serious app that might actually benefit from NoSQL, then you should host it on a serious machine and not some shared hosting solution.

Basically conflating the idea that NoSQL is for 'real projects' and that only 'amateur hour' hosts have no compiler.

<comment><USER11> NoSQL is targeted at extreme performance. So, yes, it sounds like a reasonable assumption.

<comment><USER8> There are other advantages to NoSQL, like flexible data structure, and not having to squish your data into two incompatible data models.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> It would be helpful to add "How is this different from other NoSQL databases" to the FAQ.

<comment><USER10> It seems as though the key differentiator is 'pure python'. For python environments, this is a huge bonus, as it makes it easy to install and support with existing tools.

</comment></comment><comment><USER13> This seems like a speedy solution for inserts but I'm curious about reads

"Indexes tries to reuse as much space as possible, because metadata size is fixed, during every write operation, if index finds metadata marked as removed or so, it reuses it - writes new data into that place."

I'm curious how this is implemented.

</comment><comment><USER14> Interesting, but I'd like to see how this compares to other NoSQL such as MongoDB.

</comment><comment><USER15> I'd love to check this out this morning, but the page is unreadable using Safari on an iPhone. The table of contents stays floating above the body text, and takes up almost the whole screen.

</comment><comment><USER16> What is the difference between DatabaseThreadSafe and DatabaseSuperThreadSafe?

[http://labs.codernity.com/codernitydb/design.html#how-it- s-b...](http://labs.codernity.com/codernitydb/design.html#how-it-s-build)

</comment><comment><USER17> I've registered ##codernitydb in freenode and will idle in there, if anybody is interested in forming a community in irc

</comment><comment><USER18> No Python 3 = no thanks

</comment><comment><USER19> python ehh

</comment><comment><USER20> In case, like me, you like SQL: <http://gadfly.sourceforge.net/>

</comment><comment><USER21> The only thing that turns me off to a product more than a poor website is poor English in the documentation. If English isn't your primary language, PLEASE get someone that speaks it fluently to either write your docs, translate your docs, or edit what you've written.

<comment><USER22> They are nice to write the documentation in poor English, they could launch the product only with Polish documentation and then you would never be able to use it before someones translates it.

<comment><USER23> While this is true, it's to the detriment of their project not to have at least _some_ English docs. It grants them the largest possible audience[1] for their project. Generating interest in their tool is one of the things that they need to do if they want it to be a successful open source project.

[1]: I guess it's possible that 'Chinese' might be close too, but I have no idea how the different dialects (Mandarin/Cantonese) would affect this.

<comment><USER24> > [1]: I guess it's possible that 'Chinese' might be close too, but I have no > idea how the different dialects (Mandarin/Cantonese) would affect this.

Cantonese isn't written down, strictly speaking; when you write Chinese, there aren't dialectic differences.

<comment><USER13> nginx didn't have english docs until 2 years after the project launched. Full story from Igor Here: <http://www.ruby-forum.com/topic/151853>

Also: Don't blame people for english lang proficiency.</comment></comment></comment></comment></comment>


Ask HN: What to learn for web programming? - <AUTHOR> Languages, tech stack, tools... <comment><USER2> First html&css. Everybody underestimates this. Give at least a month to html and css.</comment>